pandora/static/pdf.js/viewer.mjs.map
2024-06-01 11:00:44 +01:00

1 line
No EOL
1.2 MiB
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{"version":3,"file":"viewer.mjs","mappings":"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","sources":["webpack://pdf.js/webpack/bootstrap","webpack://pdf.js/webpack/runtime/define property getters","webpack://pdf.js/webpack/runtime/hasOwnProperty shorthand","webpack://pdf.js/./web/ui_utils.js","webpack://pdf.js/./web/app_options.js","webpack://pdf.js/./web/pdf_link_service.js","webpack://pdf.js/./web/pdfjs.js","webpack://pdf.js/./web/event_utils.js","webpack://pdf.js/./web/external_services.js","webpack://pdf.js/./web/preferences.js","webpack://pdf.js/./node_modules/@fluent/bundle/esm/types.js","webpack://pdf.js/./node_modules/@fluent/bundle/esm/resolver.js","webpack://pdf.js/./node_modules/@fluent/bundle/esm/scope.js","webpack://pdf.js/./node_modules/@fluent/bundle/esm/builtins.js","webpack://pdf.js/./node_modules/@fluent/bundle/esm/memoizer.js","webpack://pdf.js/./node_modules/@fluent/bundle/esm/bundle.js","webpack://pdf.js/./node_modules/@fluent/bundle/esm/resource.js","webpack://pdf.js/./node_modules/@fluent/bundle/esm/index.js","webpack://pdf.js/./node_modules/@fluent/dom/esm/overlay.js","webpack://pdf.js/./node_modules/cached-iterable/src/cached_iterable.mjs","webpack://pdf.js/./node_modules/cached-iterable/src/cached_sync_iterable.mjs","webpack://pdf.js/./node_modules/cached-iterable/src/cached_async_iterable.mjs","webpack://pdf.js/./node_modules/cached-iterable/src/index.mjs","webpack://pdf.js/./node_modules/@fluent/dom/esm/localization.js","webpack://pdf.js/./node_modules/@fluent/dom/esm/dom_localization.js","webpack://pdf.js/./node_modules/@fluent/dom/esm/index.js","webpack://pdf.js/./web/l10n.js","webpack://pdf.js/./web/genericl10n.js","webpack://pdf.js/./web/generic_scripting.js","webpack://pdf.js/./web/genericcom.js","webpack://pdf.js/./web/alt_text_manager.js","webpack://pdf.js/./web/annotation_editor_params.js","webpack://pdf.js/./web/caret_browsing.js","webpack://pdf.js/./web/download_manager.js","webpack://pdf.js/./web/overlay_manager.js","webpack://pdf.js/./web/password_prompt.js","webpack://pdf.js/./web/base_tree_viewer.js","webpack://pdf.js/./web/pdf_attachment_viewer.js","webpack://pdf.js/./web/grab_to_pan.js","webpack://pdf.js/./web/pdf_cursor_tools.js","webpack://pdf.js/./web/pdf_document_properties.js","webpack://pdf.js/./web/pdf_find_utils.js","webpack://pdf.js/./web/pdf_find_controller.js","webpack://pdf.js/./web/pdf_find_bar.js","webpack://pdf.js/./web/pdf_history.js","webpack://pdf.js/./web/pdf_layer_viewer.js","webpack://pdf.js/./web/pdf_outline_viewer.js","webpack://pdf.js/./web/pdf_presentation_mode.js","webpack://pdf.js/./web/xfa_layer_builder.js","webpack://pdf.js/./web/print_utils.js","webpack://pdf.js/./web/pdf_print_service.js","webpack://pdf.js/./web/pdf_rendering_queue.js","webpack://pdf.js/./web/pdf_scripting_manager.js","webpack://pdf.js/./web/pdf_sidebar.js","webpack://pdf.js/./web/pdf_thumbnail_view.js","webpack://pdf.js/./web/pdf_thumbnail_viewer.js","webpack://pdf.js/./web/annotation_editor_layer_builder.js","webpack://pdf.js/./web/annotation_layer_builder.js","webpack://pdf.js/./web/draw_layer_builder.js","webpack://pdf.js/./web/struct_tree_layer_builder.js","webpack://pdf.js/./web/text_accessibility.js","webpack://pdf.js/./web/text_highlighter.js","webpack://pdf.js/./web/text_layer_builder.js","webpack://pdf.js/./web/pdf_page_view.js","webpack://pdf.js/./web/pdf_viewer.js","webpack://pdf.js/./web/secondary_toolbar.js","webpack://pdf.js/./web/toolbar.js","webpack://pdf.js/./web/view_history.js","webpack://pdf.js/./web/app.js","webpack://pdf.js/./web/viewer.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","/* 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 DEFAULT_SCALE_VALUE = \"auto\";\nconst DEFAULT_SCALE = 1.0;\nconst DEFAULT_SCALE_DELTA = 1.1;\nconst MIN_SCALE = 0.1;\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 RenderingStates = {\n INITIAL: 0,\n RUNNING: 1,\n PAUSED: 2,\n FINISHED: 3,\n};\n\nconst PresentationModeState = {\n UNKNOWN: 0,\n NORMAL: 1,\n CHANGING: 2,\n FULLSCREEN: 3,\n};\n\nconst SidebarView = {\n UNKNOWN: -1,\n NONE: 0,\n THUMBS: 1, // Default value.\n OUTLINE: 2,\n ATTACHMENTS: 3,\n LAYERS: 4,\n};\n\nconst TextLayerMode = {\n DISABLE: 0,\n ENABLE: 1,\n ENABLE_PERMISSIONS: 2,\n};\n\nconst ScrollMode = {\n UNKNOWN: -1,\n VERTICAL: 0, // Default value.\n HORIZONTAL: 1,\n WRAPPED: 2,\n PAGE: 3,\n};\n\nconst SpreadMode = {\n UNKNOWN: -1,\n NONE: 0, // Default value.\n ODD: 1,\n EVEN: 2,\n};\n\nconst CursorTool = {\n SELECT: 0, // The default value.\n HAND: 1,\n ZOOM: 2,\n};\n\n// Used by `PDFViewerApplication`, and by the API unit-tests.\nconst AutoPrintRegExp = /\\bprint\\s*\\(/;\n\n/**\n * Scale factors for the canvas, necessary with HiDPI displays.\n */\nclass OutputScale {\n constructor() {\n const pixelRatio = window.devicePixelRatio || 1;\n\n /**\n * @type {number} Horizontal scale.\n */\n this.sx = pixelRatio;\n\n /**\n * @type {number} Vertical scale.\n */\n this.sy = pixelRatio;\n }\n\n /**\n * @type {boolean} Returns `true` when scaling is required, `false` otherwise.\n */\n get scaled() {\n return this.sx !== 1 || this.sy !== 1;\n }\n}\n\n/**\n * Scrolls specified element into view of its parent.\n * @param {HTMLElement} 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 {number} [spot.left]\n * @param {number} [spot.top]\n * @param {boolean} [scrollMatches] - When scrolling search results into view,\n * ignore elements that either: Contains marked content identifiers,\n * or have the CSS-rule `overflow: hidden;` set. The default value is `false`.\n */\nfunction scrollIntoView(element, spot, scrollMatches = 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 (\n (parent.clientHeight === parent.scrollHeight &&\n parent.clientWidth === parent.scrollWidth) ||\n (scrollMatches &&\n (parent.classList.contains(\"markedContent\") ||\n getComputedStyle(parent).overflow === \"hidden\"))\n ) {\n offsetY += parent.offsetTop;\n offsetX += parent.offsetLeft;\n\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 const 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 const currentX = viewAreaElement.scrollLeft;\n const lastX = state.lastX;\n if (currentX !== lastX) {\n state.right = currentX > lastX;\n }\n state.lastX = currentX;\n const currentY = viewAreaElement.scrollTop;\n const lastY = state.lastY;\n if (currentY !== lastY) {\n state.down = currentY > lastY;\n }\n state.lastY = currentY;\n callback(state);\n });\n };\n\n const 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&param2=...).\n * @param {string} query\n * @returns {Map}\n */\nfunction parseQueryString(query) {\n const params = new Map();\n for (const [key, value] of new URLSearchParams(query)) {\n params.set(key.toLowerCase(), value);\n }\n return params;\n}\n\nconst InvisibleCharsRegExp = /[\\x00-\\x1F]/g;\n\n/**\n * @param {string} str\n * @param {boolean} [replaceInvisible]\n */\nfunction removeNullCharacters(str, replaceInvisible = false) {\n if (!InvisibleCharsRegExp.test(str)) {\n return str;\n }\n if (replaceInvisible) {\n return str.replaceAll(InvisibleCharsRegExp, m => (m === \"\\x00\" ? \"\" : \" \"));\n }\n return str.replaceAll(\"\\x00\", \"\");\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, start = 0) {\n let minIndex = start;\n let maxIndex = items.length - 1;\n\n if (maxIndex < 0 || !condition(items[maxIndex])) {\n return items.length;\n }\n if (condition(items[minIndex])) {\n return minIndex;\n }\n\n while (minIndex < maxIndex) {\n const currentIndex = (minIndex + maxIndex) >> 1;\n const 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 const xinv = 1 / x;\n const limit = 8;\n if (xinv > limit) {\n return [1, limit];\n } else if (Math.floor(xinv) === xinv) {\n return [1, xinv];\n }\n\n const x_ = x > 1 ? xinv : x;\n // a/b and c/d are neighbours in Farey sequence.\n let a = 0,\n b = 1,\n c = 1,\n d = 1;\n // Limiting search to order 8.\n while (true) {\n // Generating next term in sequence (order of q).\n const p = a + c,\n q = b + d;\n if (q > limit) {\n break;\n }\n if (x_ <= p / q) {\n c = p;\n d = q;\n } else {\n a = p;\n 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 const r = x % div;\n return r === 0 ? x : Math.round(x - r + div);\n}\n\n/**\n * @typedef {Object} GetPageSizeInchesParameters\n * @property {number[]} view\n * @property {number} userUnit\n * @property {number} rotate\n */\n\n/**\n * @typedef {Object} PageSize\n * @property {number} width - In inches.\n * @property {number} height - In inches.\n */\n\n/**\n * Gets the size of the specified page, converted from PDF units to inches.\n * @param {GetPageSizeInchesParameters} params\n * @returns {PageSize}\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 * @typedef {Object} GetVisibleElementsParameters\n * @property {HTMLElement} scrollEl - A container that can possibly scroll.\n * @property {Array} views - Objects with a `div` property that contains an\n * HTMLElement, which should all be descendants of `scrollEl` satisfying the\n * relevant layout assumptions.\n * @property {boolean} sortByVisibility - If `true`, the returned elements are\n * sorted in descending order of the percent of their padding box that is\n * visible. The default value is `false`.\n * @property {boolean} horizontal - If `true`, the elements are assumed to be\n * laid out horizontally instead of vertically. The default value is `false`.\n * @property {boolean} rtl - If `true`, the `scrollEl` container is assumed to\n * be in right-to-left mode. The default value is `false`.\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 {GetVisibleElementsParameters} params\n * @returns {Object} `{ first, last, views: [{ id, x, y, view, percent }] }`\n */\nfunction getVisibleElements({\n scrollEl,\n views,\n sortByVisibility = false,\n horizontal = false,\n rtl = false,\n}) {\n const top = scrollEl.scrollTop,\n bottom = top + scrollEl.clientHeight;\n const left = scrollEl.scrollLeft,\n 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 isElementNextAfterViewHorizontally(view) {\n const element = view.div;\n const elementLeft = element.offsetLeft + element.clientLeft;\n const elementRight = elementLeft + element.clientWidth;\n return rtl ? elementLeft < right : elementRight > left;\n }\n\n const visible = [],\n ids = new Set(),\n numViews = views.length;\n let firstVisibleElementInd = binarySearchFirstItem(\n views,\n horizontal\n ? isElementNextAfterViewHorizontally\n : isElementBottomAfterViewTop\n );\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 (\n firstVisibleElementInd > 0 &&\n firstVisibleElementInd < numViews &&\n !horizontal\n ) {\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 = backtrackBeforeAllVisibleElements(\n firstVisibleElementInd,\n views,\n top\n );\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],\n element = view.div;\n const currentWidth = element.offsetLeft + element.clientLeft;\n const currentHeight = element.offsetTop + element.clientTop;\n const viewWidth = element.clientWidth,\n 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 (\n viewBottom <= top ||\n currentHeight >= bottom ||\n viewRight <= left ||\n currentWidth >= right\n ) {\n continue;\n }\n\n const hiddenHeight =\n Math.max(0, top - currentHeight) + Math.max(0, viewBottom - bottom);\n const hiddenWidth =\n Math.max(0, left - currentWidth) + Math.max(0, viewRight - right);\n\n const fractionHeight = (viewHeight - hiddenHeight) / viewHeight,\n fractionWidth = (viewWidth - hiddenWidth) / viewWidth;\n const percent = (fractionHeight * fractionWidth * 100) | 0;\n\n visible.push({\n id: view.id,\n x: currentWidth,\n y: currentHeight,\n view,\n percent,\n widthPercent: (fractionWidth * 100) | 0,\n });\n ids.add(view.id);\n }\n\n const first = visible[0],\n last = visible.at(-1);\n\n if (sortByVisibility) {\n visible.sort(function (a, b) {\n const 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, ids };\n}\n\nfunction normalizeWheelEventDirection(evt) {\n let delta = Math.hypot(evt.deltaX, evt.deltaY);\n const 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 return delta;\n}\n\nfunction normalizeWheelEventDelta(evt) {\n const deltaMode = evt.deltaMode; // Avoid being affected by bug 1392460.\n let delta = normalizeWheelEventDirection(evt);\n\n const MOUSE_PIXELS_PER_LINE = 30;\n const MOUSE_LINES_PER_PAGE = 30;\n\n // Converts delta to per-page units\n if (deltaMode === WheelEvent.DOM_DELTA_PIXEL) {\n delta /= MOUSE_PIXELS_PER_LINE * MOUSE_LINES_PER_PAGE;\n } else if (deltaMode === WheelEvent.DOM_DELTA_LINE) {\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 (\n Number.isInteger(mode) &&\n Object.values(ScrollMode).includes(mode) &&\n mode !== ScrollMode.UNKNOWN\n );\n}\n\nfunction isValidSpreadMode(mode) {\n return (\n Number.isInteger(mode) &&\n Object.values(SpreadMode).includes(mode) &&\n mode !== SpreadMode.UNKNOWN\n );\n}\n\nfunction isPortraitOrientation(size) {\n return size.width <= size.height;\n}\n\n/**\n * Promise that is resolved when DOM window becomes visible.\n */\nconst animationStarted = new Promise(function (resolve) {\n if (\n typeof PDFJSDev !== \"undefined\" &&\n PDFJSDev.test(\"LIB\") &&\n typeof window === \"undefined\"\n ) {\n // Prevent \"ReferenceError: window is not defined\" errors when running the\n // unit-tests in Node.js environments.\n setTimeout(resolve, 20);\n return;\n }\n window.requestAnimationFrame(resolve);\n});\n\nconst docStyle =\n typeof PDFJSDev !== \"undefined\" &&\n PDFJSDev.test(\"LIB\") &&\n typeof document === \"undefined\"\n ? null\n : document.documentElement.style;\n\nfunction clamp(v, min, max) {\n return Math.min(Math.max(v, min), max);\n}\n\nclass ProgressBar {\n #classList = null;\n\n #disableAutoFetchTimeout = null;\n\n #percent = 0;\n\n #style = null;\n\n #visible = true;\n\n constructor(bar) {\n this.#classList = bar.classList;\n this.#style = bar.style;\n }\n\n get percent() {\n return this.#percent;\n }\n\n set percent(val) {\n this.#percent = clamp(val, 0, 100);\n\n if (isNaN(val)) {\n this.#classList.add(\"indeterminate\");\n return;\n }\n this.#classList.remove(\"indeterminate\");\n\n this.#style.setProperty(\"--progressBar-percent\", `${this.#percent}%`);\n }\n\n setWidth(viewer) {\n if (!viewer) {\n return;\n }\n const container = viewer.parentNode;\n const scrollbarWidth = container.offsetWidth - viewer.offsetWidth;\n if (scrollbarWidth > 0) {\n this.#style.setProperty(\n \"--progressBar-end-offset\",\n `${scrollbarWidth}px`\n );\n }\n }\n\n setDisableAutoFetch(delay = /* ms = */ 5000) {\n if (isNaN(this.#percent)) {\n return;\n }\n if (this.#disableAutoFetchTimeout) {\n clearTimeout(this.#disableAutoFetchTimeout);\n }\n this.show();\n\n this.#disableAutoFetchTimeout = setTimeout(() => {\n this.#disableAutoFetchTimeout = null;\n this.hide();\n }, delay);\n }\n\n hide() {\n if (!this.#visible) {\n return;\n }\n this.#visible = false;\n this.#classList.add(\"hidden\");\n }\n\n show() {\n if (this.#visible) {\n return;\n }\n this.#visible = true;\n this.#classList.remove(\"hidden\");\n }\n}\n\n/**\n * Get the active or focused element in current DOM.\n *\n * Recursively search for the truly active or focused element in case there are\n * shadow DOMs.\n *\n * @returns {Element} the truly active or focused element.\n */\nfunction getActiveOrFocusedElement() {\n let curRoot = document;\n let curActiveOrFocused =\n curRoot.activeElement || curRoot.querySelector(\":focus\");\n\n while (curActiveOrFocused?.shadowRoot) {\n curRoot = curActiveOrFocused.shadowRoot;\n curActiveOrFocused =\n curRoot.activeElement || curRoot.querySelector(\":focus\");\n }\n\n return curActiveOrFocused;\n}\n\n/**\n * Converts API PageLayout values to the format used by `BaseViewer`.\n * @param {string} layout - The API PageLayout value.\n * @returns {Object}\n */\nfunction apiPageLayoutToViewerModes(layout) {\n let scrollMode = ScrollMode.VERTICAL,\n spreadMode = SpreadMode.NONE;\n\n switch (layout) {\n case \"SinglePage\":\n scrollMode = ScrollMode.PAGE;\n break;\n case \"OneColumn\":\n break;\n case \"TwoPageLeft\":\n scrollMode = ScrollMode.PAGE;\n /* falls through */\n case \"TwoColumnLeft\":\n spreadMode = SpreadMode.ODD;\n break;\n case \"TwoPageRight\":\n scrollMode = ScrollMode.PAGE;\n /* falls through */\n case \"TwoColumnRight\":\n spreadMode = SpreadMode.EVEN;\n break;\n }\n return { scrollMode, spreadMode };\n}\n\n/**\n * Converts API PageMode values to the format used by `PDFSidebar`.\n * NOTE: There's also a \"FullScreen\" parameter which is not possible to support,\n * since the Fullscreen API used in browsers requires that entering\n * fullscreen mode only occurs as a result of a user-initiated event.\n * @param {string} mode - The API PageMode value.\n * @returns {number} A value from {SidebarView}.\n */\nfunction apiPageModeToSidebarView(mode) {\n switch (mode) {\n case \"UseNone\":\n return SidebarView.NONE;\n case \"UseThumbs\":\n return SidebarView.THUMBS;\n case \"UseOutlines\":\n return SidebarView.OUTLINE;\n case \"UseAttachments\":\n return SidebarView.ATTACHMENTS;\n case \"UseOC\":\n return SidebarView.LAYERS;\n }\n return SidebarView.NONE; // Default value.\n}\n\nfunction toggleCheckedBtn(button, toggle, view = null) {\n button.classList.toggle(\"toggled\", toggle);\n button.setAttribute(\"aria-checked\", toggle);\n\n view?.classList.toggle(\"hidden\", !toggle);\n}\n\nfunction toggleExpandedBtn(button, toggle, view = null) {\n button.classList.toggle(\"toggled\", toggle);\n button.setAttribute(\"aria-expanded\", toggle);\n\n view?.classList.toggle(\"hidden\", !toggle);\n}\n\nexport {\n animationStarted,\n apiPageLayoutToViewerModes,\n apiPageModeToSidebarView,\n approximateFraction,\n AutoPrintRegExp,\n backtrackBeforeAllVisibleElements, // only exported for testing\n binarySearchFirstItem,\n CursorTool,\n DEFAULT_SCALE,\n DEFAULT_SCALE_DELTA,\n DEFAULT_SCALE_VALUE,\n docStyle,\n getActiveOrFocusedElement,\n getPageSizeInches,\n getVisibleElements,\n isPortraitOrientation,\n isValidRotation,\n isValidScrollMode,\n isValidSpreadMode,\n MAX_AUTO_SCALE,\n MAX_SCALE,\n MIN_SCALE,\n normalizeWheelEventDelta,\n normalizeWheelEventDirection,\n OutputScale,\n parseQueryString,\n PresentationModeState,\n ProgressBar,\n removeNullCharacters,\n RenderingStates,\n roundToDivide,\n SCROLLBAR_PADDING,\n scrollIntoView,\n ScrollMode,\n SidebarView,\n SpreadMode,\n TextLayerMode,\n toggleCheckedBtn,\n toggleExpandedBtn,\n UNKNOWN_SCALE,\n VERTICAL_PADDING,\n watchScroll,\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\nif (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n // eslint-disable-next-line no-var\n var compatibilityParams = Object.create(null);\n if (\n typeof PDFJSDev !== \"undefined\" &&\n PDFJSDev.test(\"LIB\") &&\n typeof navigator === \"undefined\"\n ) {\n globalThis.navigator = Object.create(null);\n }\n const userAgent = navigator.userAgent || \"\";\n const platform = navigator.platform || \"\";\n const maxTouchPoints = navigator.maxTouchPoints || 1;\n\n const isAndroid = /Android/.test(userAgent);\n const isIOS =\n /\\b(iPad|iPhone|iPod)(?=;)/.test(userAgent) ||\n (platform === \"MacIntel\" && maxTouchPoints > 1);\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\nconst OptionKind = {\n BROWSER: 0x01,\n VIEWER: 0x02,\n API: 0x04,\n WORKER: 0x08,\n PREFERENCE: 0x80,\n};\n\n/**\n * NOTE: These options are used to generate the `default_preferences.json` file,\n * see `OptionKind.PREFERENCE`, hence the values below must use only\n * primitive types and cannot rely on any imported types.\n */\nconst defaultOptions = {\n canvasMaxAreaInBytes: {\n /** @type {number} */\n value: -1,\n kind: OptionKind.BROWSER + OptionKind.API,\n },\n isInAutomation: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.BROWSER,\n },\n supportsCaretBrowsingMode: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.BROWSER,\n },\n supportsDocumentFonts: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.BROWSER,\n },\n supportsIntegratedFind: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.BROWSER,\n },\n supportsMouseWheelZoomCtrlKey: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.BROWSER,\n },\n supportsMouseWheelZoomMetaKey: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.BROWSER,\n },\n supportsPinchToZoom: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.BROWSER,\n },\n\n annotationEditorMode: {\n /** @type {number} */\n value: 0,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n annotationMode: {\n /** @type {number} */\n value: 2,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n cursorToolOnLoad: {\n /** @type {number} */\n value: 0,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n debuggerSrc: {\n /** @type {string} */\n value: \"./debugger.mjs\",\n kind: OptionKind.VIEWER,\n },\n defaultZoomDelay: {\n /** @type {number} */\n value: 400,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n defaultZoomValue: {\n /** @type {string} */\n value: \"\",\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n disableHistory: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.VIEWER,\n },\n disablePageLabels: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n enableHighlightEditor: {\n // We'll probably want to make some experiments before enabling this\n // in Firefox release, but it has to be temporary.\n // TODO: remove it when unnecessary.\n /** @type {boolean} */\n value: typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\"),\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n enableHighlightFloatingButton: {\n // We'll probably want to make some experiments before enabling this\n // in Firefox release, but it has to be temporary.\n // TODO: remove it when unnecessary.\n /** @type {boolean} */\n value: typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\"),\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n enableML: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n enablePermissions: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n enablePrintAutoRotate: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n enableScripting: {\n /** @type {boolean} */\n value: typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"CHROME\"),\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n enableStampEditor: {\n // We'll probably want to make some experiments before enabling this\n // in Firefox release, but it has to be temporary.\n // TODO: remove it when unnecessary.\n /** @type {boolean} */\n value: true,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n externalLinkRel: {\n /** @type {string} */\n value: \"noopener noreferrer nofollow\",\n kind: OptionKind.VIEWER,\n },\n externalLinkTarget: {\n /** @type {number} */\n value: 0,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n highlightEditorColors: {\n /** @type {string} */\n value: \"yellow=#FFFF98,green=#53FFBC,blue=#80EBFF,pink=#FFCBE6,red=#FF4F5F\",\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n historyUpdateUrl: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n ignoreDestinationZoom: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n imageResourcesPath: {\n /** @type {string} */\n value:\n typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")\n ? \"resource://pdf.js/web/images/\"\n : \"./images/\",\n kind: OptionKind.VIEWER,\n },\n maxCanvasPixels: {\n /** @type {number} */\n value: 2 ** 25,\n kind: OptionKind.VIEWER,\n },\n forcePageColors: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n pageColorsBackground: {\n /** @type {string} */\n value: \"Canvas\",\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n pageColorsForeground: {\n /** @type {string} */\n value: \"CanvasText\",\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n pdfBugEnabled: {\n /** @type {boolean} */\n value: typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\"),\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n printResolution: {\n /** @type {number} */\n value: 150,\n kind: OptionKind.VIEWER,\n },\n sidebarViewOnLoad: {\n /** @type {number} */\n value: -1,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n scrollModeOnLoad: {\n /** @type {number} */\n value: -1,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n spreadModeOnLoad: {\n /** @type {number} */\n value: -1,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n textLayerMode: {\n /** @type {number} */\n value: 1,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n viewOnLoad: {\n /** @type {boolean} */\n value: 0,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n\n cMapPacked: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.API,\n },\n cMapUrl: {\n /** @type {string} */\n value:\n // eslint-disable-next-line no-nested-ternary\n typeof PDFJSDev === \"undefined\"\n ? \"../external/bcmaps/\"\n : PDFJSDev.test(\"MOZCENTRAL\")\n ? \"resource://pdf.js/web/cmaps/\"\n : \"../web/cmaps/\",\n kind: OptionKind.API,\n },\n disableAutoFetch: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.API + OptionKind.PREFERENCE,\n },\n disableFontFace: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.API + OptionKind.PREFERENCE,\n },\n disableRange: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.API + OptionKind.PREFERENCE,\n },\n disableStream: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.API + OptionKind.PREFERENCE,\n },\n docBaseUrl: {\n /** @type {string} */\n value: \"\",\n kind: OptionKind.API,\n },\n enableXfa: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.API + OptionKind.PREFERENCE,\n },\n fontExtraProperties: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.API,\n },\n isEvalSupported: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.API,\n },\n isOffscreenCanvasSupported: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.API,\n },\n maxImageSize: {\n /** @type {number} */\n value: -1,\n kind: OptionKind.API,\n },\n pdfBug: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.API,\n },\n standardFontDataUrl: {\n /** @type {string} */\n value:\n // eslint-disable-next-line no-nested-ternary\n typeof PDFJSDev === \"undefined\"\n ? \"../external/standard_fonts/\"\n : PDFJSDev.test(\"MOZCENTRAL\")\n ? \"resource://pdf.js/web/standard_fonts/\"\n : \"../web/standard_fonts/\",\n kind: OptionKind.API,\n },\n verbosity: {\n /** @type {number} */\n value: 1,\n kind: OptionKind.API,\n },\n\n workerPort: {\n /** @type {Object} */\n value: null,\n kind: OptionKind.WORKER,\n },\n workerSrc: {\n /** @type {string} */\n value:\n // eslint-disable-next-line no-nested-ternary\n typeof PDFJSDev === \"undefined\"\n ? \"../src/pdf.worker.js\"\n : PDFJSDev.test(\"MOZCENTRAL\")\n ? \"resource://pdf.js/build/pdf.worker.mjs\"\n : \"../build/pdf.worker.mjs\",\n kind: OptionKind.WORKER,\n },\n};\nif (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"MOZCENTRAL\")) {\n defaultOptions.defaultUrl = {\n /** @type {string} */\n value:\n typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"CHROME\")\n ? \"\"\n : \"compressed.tracemonkey-pldi-09.pdf\",\n kind: OptionKind.VIEWER,\n };\n defaultOptions.sandboxBundleSrc = {\n /** @type {string} */\n value:\n typeof PDFJSDev === \"undefined\"\n ? \"../build/dev-sandbox/pdf.sandbox.mjs\"\n : \"../build/pdf.sandbox.mjs\",\n kind: OptionKind.VIEWER,\n };\n defaultOptions.viewerCssTheme = {\n /** @type {number} */\n value: typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"CHROME\") ? 2 : 0,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n };\n}\nif (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n defaultOptions.disablePreferences = {\n /** @type {boolean} */\n value: typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"TESTING\"),\n kind: OptionKind.VIEWER,\n };\n defaultOptions.locale = {\n /** @type {string} */\n value: navigator.language || \"en-US\",\n kind: OptionKind.VIEWER,\n };\n} else if (PDFJSDev.test(\"CHROME\")) {\n defaultOptions.disableTelemetry = {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n };\n}\n\nconst userOptions = Object.create(null);\n\nif (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n // Apply any compatibility-values to the user-options,\n // see also `AppOptions.remove` below.\n for (const name in compatibilityParams) {\n userOptions[name] = compatibilityParams[name];\n }\n}\n\nif (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING || LIB\")) {\n // Ensure that the `defaultOptions` are correctly specified.\n for (const name in defaultOptions) {\n const { value, kind } = defaultOptions[name];\n\n if (kind & OptionKind.PREFERENCE) {\n if (kind === OptionKind.PREFERENCE) {\n throw new Error(`Cannot use only \"PREFERENCE\" kind: ${name}`);\n }\n if (kind & OptionKind.BROWSER) {\n throw new Error(`Cannot mix \"PREFERENCE\" and \"BROWSER\" kind: ${name}`);\n }\n if (\n typeof compatibilityParams === \"object\" &&\n compatibilityParams[name] !== undefined\n ) {\n throw new Error(\n `Should not have compatibility-value for \"PREFERENCE\" kind: ${name}`\n );\n }\n // Only \"simple\" preference-values are allowed.\n if (\n typeof value !== \"boolean\" &&\n typeof value !== \"string\" &&\n !Number.isInteger(value)\n ) {\n throw new Error(`Invalid value for \"PREFERENCE\" kind: ${name}`);\n }\n }\n }\n}\n\nclass AppOptions {\n constructor() {\n throw new Error(\"Cannot initialize AppOptions.\");\n }\n\n static get(name) {\n return userOptions[name] ?? defaultOptions[name]?.value ?? undefined;\n }\n\n static getAll(kind = null, defaultOnly = false) {\n const options = Object.create(null);\n for (const name in defaultOptions) {\n const defaultOption = defaultOptions[name];\n\n if (kind && !(kind & defaultOption.kind)) {\n continue;\n }\n options[name] = defaultOnly\n ? defaultOption.value\n : userOptions[name] ?? defaultOption.value;\n }\n return options;\n }\n\n static set(name, value) {\n userOptions[name] = value;\n }\n\n static setAll(options, init = false) {\n if ((typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) && init) {\n if (this.get(\"disablePreferences\")) {\n // Give custom implementations of the default viewer a simpler way to\n // opt-out of having the `Preferences` override existing `AppOptions`.\n return;\n }\n for (const name in userOptions) {\n // Ignore any compatibility-values in the user-options.\n if (compatibilityParams[name] !== undefined) {\n continue;\n }\n console.warn(\n \"setAll: The Preferences may override manually set AppOptions; \" +\n 'please use the \"disablePreferences\"-option in order to prevent that.'\n );\n break;\n }\n }\n\n for (const name in options) {\n userOptions[name] = options[name];\n }\n }\n\n static remove(name) {\n delete userOptions[name];\n\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n // Re-apply a compatibility-value, if it exists, to the user-options.\n const val = compatibilityParams[name];\n if (val !== undefined) {\n userOptions[name] = val;\n }\n }\n }\n}\n\nexport { AppOptions, OptionKind };\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\n/** @typedef {import(\"./event_utils\").EventBus} EventBus */\n/** @typedef {import(\"./interfaces\").IPDFLinkService} IPDFLinkService */\n\nimport { parseQueryString } from \"./ui_utils.js\";\n\nconst DEFAULT_LINK_REL = \"noopener noreferrer nofollow\";\n\nconst LinkTarget = {\n NONE: 0, // Default value.\n SELF: 1,\n BLANK: 2,\n PARENT: 3,\n TOP: 4,\n};\n\n/**\n * @typedef {Object} PDFLinkServiceOptions\n * @property {EventBus} eventBus - The application event bus.\n * @property {number} [externalLinkTarget] - Specifies the `target` attribute\n * for external links. Must use one of the values from {LinkTarget}.\n * Defaults to using no target.\n * @property {string} [externalLinkRel] - Specifies the `rel` attribute for\n * external links. Defaults to stripping the referrer.\n * @property {boolean} [ignoreDestinationZoom] - Ignores the zoom argument,\n * thus preserving the current zoom level in the viewer, when navigating\n * to internal destinations. The default value is `false`.\n */\n\n/**\n * Performs navigation functions inside PDF, such as opening specified page,\n * or destination.\n * @implements {IPDFLinkService}\n */\nclass PDFLinkService {\n externalLinkEnabled = true;\n\n /**\n * @param {PDFLinkServiceOptions} options\n */\n constructor({\n eventBus,\n externalLinkTarget = null,\n externalLinkRel = null,\n ignoreDestinationZoom = false,\n } = {}) {\n this.eventBus = eventBus;\n this.externalLinkTarget = externalLinkTarget;\n this.externalLinkRel = externalLinkRel;\n this._ignoreDestinationZoom = ignoreDestinationZoom;\n\n this.baseUrl = null;\n this.pdfDocument = null;\n this.pdfViewer = null;\n this.pdfHistory = null;\n }\n\n setDocument(pdfDocument, baseUrl = null) {\n this.baseUrl = baseUrl;\n this.pdfDocument = pdfDocument;\n }\n\n setViewer(pdfViewer) {\n this.pdfViewer = pdfViewer;\n }\n\n setHistory(pdfHistory) {\n this.pdfHistory = pdfHistory;\n }\n\n /**\n * @type {number}\n */\n get pagesCount() {\n return this.pdfDocument ? this.pdfDocument.numPages : 0;\n }\n\n /**\n * @type {number}\n */\n get page() {\n return this.pdfDocument ? this.pdfViewer.currentPageNumber : 1;\n }\n\n /**\n * @param {number} value\n */\n set page(value) {\n if (this.pdfDocument) {\n this.pdfViewer.currentPageNumber = value;\n }\n }\n\n /**\n * @type {number}\n */\n get rotation() {\n return this.pdfDocument ? this.pdfViewer.pagesRotation : 0;\n }\n\n /**\n * @param {number} value\n */\n set rotation(value) {\n if (this.pdfDocument) {\n this.pdfViewer.pagesRotation = value;\n }\n }\n\n /**\n * @type {boolean}\n */\n get isInPresentationMode() {\n return this.pdfDocument ? this.pdfViewer.isInPresentationMode : false;\n }\n\n /**\n * This method will, when available, also update the browser history.\n *\n * @param {string|Array} dest - The named, or explicit, PDF destination.\n */\n async goToDestination(dest) {\n if (!this.pdfDocument) {\n return;\n }\n let namedDest, explicitDest, pageNumber;\n if (typeof dest === \"string\") {\n namedDest = dest;\n explicitDest = await this.pdfDocument.getDestination(dest);\n } else {\n namedDest = null;\n explicitDest = await dest;\n }\n if (!Array.isArray(explicitDest)) {\n console.error(\n `goToDestination: \"${explicitDest}\" is not a valid destination array, for dest=\"${dest}\".`\n );\n return;\n }\n // Dest array looks like that: <page-ref> </XYZ|/FitXXX> <args..>\n const [destRef] = explicitDest;\n\n if (destRef && typeof destRef === \"object\") {\n pageNumber = this.pdfDocument.cachedPageNumber(destRef);\n\n if (!pageNumber) {\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 try {\n pageNumber = (await this.pdfDocument.getPageIndex(destRef)) + 1;\n } catch {\n console.error(\n `goToDestination: \"${destRef}\" is not a valid page reference, for dest=\"${dest}\".`\n );\n return;\n }\n }\n } else if (Number.isInteger(destRef)) {\n pageNumber = destRef + 1;\n }\n if (!pageNumber || pageNumber < 1 || pageNumber > this.pagesCount) {\n console.error(\n `goToDestination: \"${pageNumber}\" is not a valid page number, for dest=\"${dest}\".`\n );\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 ignoreDestinationZoom: this._ignoreDestinationZoom,\n });\n }\n\n /**\n * This method will, when available, also update the browser history.\n *\n * @param {number|string} val - The page number, or page label.\n */\n goToPage(val) {\n if (!this.pdfDocument) {\n return;\n }\n const pageNumber =\n (typeof val === \"string\" && this.pdfViewer.pageLabelToPageNumber(val)) ||\n val | 0;\n if (\n !(\n Number.isInteger(pageNumber) &&\n pageNumber > 0 &&\n pageNumber <= this.pagesCount\n )\n ) {\n console.error(`PDFLinkService.goToPage: \"${val}\" is not a valid page.`);\n return;\n }\n\n if (this.pdfHistory) {\n // Update the browser history before scrolling the new page into view,\n // to be able to accurately capture the current document position.\n this.pdfHistory.pushCurrentPosition();\n this.pdfHistory.pushPage(pageNumber);\n }\n\n this.pdfViewer.scrollPageIntoView({ pageNumber });\n }\n\n /**\n * Adds various attributes (href, title, target, rel) to hyperlinks.\n * @param {HTMLAnchorElement} link\n * @param {string} url\n * @param {boolean} [newWindow]\n */\n addLinkAttributes(link, url, newWindow = false) {\n if (!url || typeof url !== \"string\") {\n throw new Error('A valid \"url\" parameter must provided.');\n }\n const target = newWindow ? LinkTarget.BLANK : this.externalLinkTarget,\n rel = this.externalLinkRel;\n\n if (this.externalLinkEnabled) {\n link.href = link.title = url;\n } else {\n link.href = \"\";\n link.title = `Disabled: ${url}`;\n link.onclick = () => false;\n }\n\n let targetStr = \"\"; // LinkTarget.NONE\n switch (target) {\n case LinkTarget.NONE:\n break;\n case LinkTarget.SELF:\n targetStr = \"_self\";\n break;\n case LinkTarget.BLANK:\n targetStr = \"_blank\";\n break;\n case LinkTarget.PARENT:\n targetStr = \"_parent\";\n break;\n case LinkTarget.TOP:\n targetStr = \"_top\";\n break;\n }\n link.target = targetStr;\n\n link.rel = typeof rel === \"string\" ? rel : DEFAULT_LINK_REL;\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 if (dest.length > 0) {\n return this.getAnchorUrl(\"#\" + escape(dest));\n }\n } else if (Array.isArray(dest)) {\n const str = JSON.stringify(dest);\n if (str.length > 0) {\n return this.getAnchorUrl(\"#\" + escape(str));\n }\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 ? this.baseUrl + anchor : anchor;\n }\n\n /**\n * @param {string} hash\n */\n setHash(hash) {\n if (!this.pdfDocument) {\n return;\n }\n let pageNumber, dest;\n if (hash.includes(\"=\")) {\n const params = parseQueryString(hash);\n if (params.has(\"search\")) {\n const query = params.get(\"search\").replaceAll('\"', \"\"),\n phrase = params.get(\"phrase\") === \"true\";\n\n this.eventBus.dispatch(\"findfromurlhash\", {\n source: this,\n query: phrase ? query : query.match(/\\S+/g),\n });\n }\n // borrowing syntax from \"Parameters for Opening PDF Files\"\n if (params.has(\"page\")) {\n pageNumber = params.get(\"page\") | 0 || 1;\n }\n if (params.has(\"zoom\")) {\n // Build the destination array.\n const zoomArgs = params.get(\"zoom\").split(\",\"); // scale,left,top\n const zoomArg = zoomArgs[0];\n const 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 = [\n null,\n { name: \"XYZ\" },\n zoomArgs.length > 1 ? zoomArgs[1] | 0 : null,\n zoomArgs.length > 2 ? zoomArgs[2] | 0 : null,\n zoomArgNumber ? zoomArgNumber / 100 : zoomArg,\n ];\n } else if (zoomArg === \"Fit\" || zoomArg === \"FitB\") {\n dest = [null, { name: zoomArg }];\n } else if (\n zoomArg === \"FitH\" ||\n zoomArg === \"FitBH\" ||\n zoomArg === \"FitV\" ||\n zoomArg === \"FitBV\"\n ) {\n dest = [\n null,\n { name: zoomArg },\n zoomArgs.length > 1 ? zoomArgs[1] | 0 : null,\n ];\n } else if (zoomArg === \"FitR\") {\n if (zoomArgs.length !== 5) {\n console.error(\n 'PDFLinkService.setHash: Not enough parameters for \"FitR\".'\n );\n } else {\n dest = [\n null,\n { name: zoomArg },\n zoomArgs[1] | 0,\n zoomArgs[2] | 0,\n zoomArgs[3] | 0,\n zoomArgs[4] | 0,\n ];\n }\n } else {\n console.error(\n `PDFLinkService.setHash: \"${zoomArg}\" is not 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 (params.has(\"pagemode\")) {\n this.eventBus.dispatch(\"pagemode\", {\n source: this,\n mode: params.get(\"pagemode\"),\n });\n }\n // Ensure that this parameter is *always* handled last, in order to\n // guarantee that it won't be overridden (e.g. by the \"page\" parameter).\n if (params.has(\"nameddest\")) {\n this.goToDestination(params.get(\"nameddest\"));\n }\n\n if (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"MOZCENTRAL\")) {\n return;\n }\n // Support opening of PDF attachments in the Firefox PDF Viewer,\n // which uses a couple of non-standard hash parameters; refer to\n // `DownloadManager.openOrDownloadData` in the firefoxcom.js file.\n if (!params.has(\"filename\") || !params.has(\"filedest\")) {\n return;\n }\n hash = params.get(\"filedest\");\n }\n\n // 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 {}\n\n if (typeof dest === \"string\" || PDFLinkService.#isValidExplicitDest(dest)) {\n this.goToDestination(dest);\n return;\n }\n console.error(\n `PDFLinkService.setHash: \"${unescape(hash)}\" is not a valid destination.`\n );\n }\n\n /**\n * @param {string} action\n */\n executeNamedAction(action) {\n if (!this.pdfDocument) {\n return;\n }\n // See PDF reference, table 8.45 - Named action\n switch (action) {\n case \"GoBack\":\n this.pdfHistory?.back();\n break;\n\n case \"GoForward\":\n this.pdfHistory?.forward();\n break;\n\n case \"NextPage\":\n this.pdfViewer.nextPage();\n break;\n\n case \"PrevPage\":\n this.pdfViewer.previousPage();\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} action\n */\n async executeSetOCGState(action) {\n if (!this.pdfDocument) {\n return;\n }\n const pdfDocument = this.pdfDocument,\n optionalContentConfig = await this.pdfViewer.optionalContentConfigPromise;\n\n if (pdfDocument !== this.pdfDocument) {\n return; // The document was closed while the optional content resolved.\n }\n optionalContentConfig.setOCGState(action);\n\n this.pdfViewer.optionalContentConfigPromise = Promise.resolve(\n optionalContentConfig\n );\n }\n\n static #isValidExplicitDest(dest) {\n if (!Array.isArray(dest) || dest.length < 2) {\n return false;\n }\n const [page, zoom, ...args] = dest;\n if (\n !(\n typeof page === \"object\" &&\n Number.isInteger(page?.num) &&\n Number.isInteger(page?.gen)\n ) &&\n !Number.isInteger(page)\n ) {\n return false;\n }\n if (!(typeof zoom === \"object\" && typeof zoom?.name === \"string\")) {\n return false;\n }\n let allowNull = true;\n switch (zoom.name) {\n case \"XYZ\":\n if (args.length !== 3) {\n return false;\n }\n break;\n case \"Fit\":\n case \"FitB\":\n return args.length === 0;\n case \"FitH\":\n case \"FitBH\":\n case \"FitV\":\n case \"FitBV\":\n if (args.length !== 1) {\n return false;\n }\n break;\n case \"FitR\":\n if (args.length !== 4) {\n return false;\n }\n allowNull = false;\n break;\n default:\n return false;\n }\n for (const arg of args) {\n if (!(typeof arg === \"number\" || (allowNull && arg === null))) {\n return false;\n }\n }\n return true;\n }\n}\n\n/**\n * @implements {IPDFLinkService}\n */\nclass SimpleLinkService extends PDFLinkService {\n setDocument(pdfDocument, baseUrl = null) {}\n}\n\nexport { LinkTarget, PDFLinkService, SimpleLinkService };\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\nconst {\n AbortException,\n AnnotationEditorLayer,\n AnnotationEditorParamsType,\n AnnotationEditorType,\n AnnotationEditorUIManager,\n AnnotationLayer,\n AnnotationMode,\n build,\n CMapCompressionType,\n ColorPicker,\n createValidAbsoluteUrl,\n DOMSVGFactory,\n DrawLayer,\n FeatureTest,\n fetchData,\n getDocument,\n getFilenameFromUrl,\n getPdfFilenameFromUrl,\n getXfaPageViewport,\n GlobalWorkerOptions,\n ImageKind,\n InvalidPDFException,\n isDataScheme,\n isPdfFile,\n MissingPDFException,\n noContextMenu,\n normalizeUnicode,\n OPS,\n Outliner,\n PasswordResponses,\n PDFDataRangeTransport,\n PDFDateString,\n PDFWorker,\n PermissionFlag,\n PixelsPerInch,\n RenderingCancelledException,\n renderTextLayer,\n setLayerDimensions,\n shadow,\n TextLayer,\n UnexpectedResponseException,\n updateTextLayer,\n Util,\n VerbosityLevel,\n version,\n XfaLayer,\n} = globalThis.pdfjsLib;\n\nexport {\n AbortException,\n AnnotationEditorLayer,\n AnnotationEditorParamsType,\n AnnotationEditorType,\n AnnotationEditorUIManager,\n AnnotationLayer,\n AnnotationMode,\n build,\n CMapCompressionType,\n ColorPicker,\n createValidAbsoluteUrl,\n DOMSVGFactory,\n DrawLayer,\n FeatureTest,\n fetchData,\n getDocument,\n getFilenameFromUrl,\n getPdfFilenameFromUrl,\n getXfaPageViewport,\n GlobalWorkerOptions,\n ImageKind,\n InvalidPDFException,\n isDataScheme,\n isPdfFile,\n MissingPDFException,\n noContextMenu,\n normalizeUnicode,\n OPS,\n Outliner,\n PasswordResponses,\n PDFDataRangeTransport,\n PDFDateString,\n PDFWorker,\n PermissionFlag,\n PixelsPerInch,\n RenderingCancelledException,\n renderTextLayer,\n setLayerDimensions,\n shadow,\n TextLayer,\n UnexpectedResponseException,\n updateTextLayer,\n Util,\n VerbosityLevel,\n version,\n XfaLayer,\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 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 */\nasync function waitOnEventOrTimeout({ target, name, delay = 0 }) {\n if (\n typeof target !== \"object\" ||\n !(name && typeof name === \"string\") ||\n !(Number.isInteger(delay) && delay >= 0)\n ) {\n throw new Error(\"waitOnEventOrTimeout - invalid parameters.\");\n }\n const { promise, resolve } = Promise.withResolvers();\n const ac = new AbortController();\n\n function handler(type) {\n ac.abort(); // Remove event listener.\n clearTimeout(timeout);\n\n resolve(type);\n }\n\n const evtMethod = target instanceof EventBus ? \"_on\" : \"addEventListener\";\n target[evtMethod](name, handler.bind(null, WaitOnType.EVENT), {\n signal: ac.signal,\n });\n\n const timeout = setTimeout(handler.bind(null, WaitOnType.TIMEOUT), delay);\n\n return promise;\n}\n\n/**\n * Simple event bus for an application. Listeners are attached using the `on`\n * and `off` methods. To raise an event, the `dispatch` method shall be used.\n */\nclass EventBus {\n #listeners = Object.create(null);\n\n /**\n * @param {string} eventName\n * @param {function} listener\n * @param {Object} [options]\n */\n on(eventName, listener, options = null) {\n this._on(eventName, listener, {\n external: true,\n once: options?.once,\n signal: options?.signal,\n });\n }\n\n /**\n * @param {string} eventName\n * @param {function} listener\n * @param {Object} [options]\n */\n off(eventName, listener, options = null) {\n this._off(eventName, listener);\n }\n\n /**\n * @param {string} eventName\n * @param {Object} data\n */\n dispatch(eventName, data) {\n const eventListeners = this.#listeners[eventName];\n if (!eventListeners || eventListeners.length === 0) {\n return;\n }\n let externalListeners;\n // Making copy of the listeners array in case if it will be modified\n // during dispatch.\n for (const { listener, external, once } of eventListeners.slice(0)) {\n if (once) {\n this._off(eventName, listener);\n }\n if (external) {\n (externalListeners ||= []).push(listener);\n continue;\n }\n listener(data);\n }\n // Dispatch any \"external\" listeners *after* the internal ones, to give the\n // viewer components time to handle events and update their state first.\n if (externalListeners) {\n for (const listener of externalListeners) {\n listener(data);\n }\n externalListeners = null;\n }\n }\n\n /**\n * @ignore\n */\n _on(eventName, listener, options = null) {\n let rmAbort = null;\n if (options?.signal instanceof AbortSignal) {\n const { signal } = options;\n if (signal.aborted) {\n console.error(\"Cannot use an `aborted` signal.\");\n return;\n }\n const onAbort = () => this._off(eventName, listener);\n rmAbort = () => signal.removeEventListener(\"abort\", onAbort);\n\n signal.addEventListener(\"abort\", onAbort);\n }\n\n const eventListeners = (this.#listeners[eventName] ||= []);\n eventListeners.push({\n listener,\n external: options?.external === true,\n once: options?.once === true,\n rmAbort,\n });\n }\n\n /**\n * @ignore\n */\n _off(eventName, listener, options = null) {\n const eventListeners = this.#listeners[eventName];\n if (!eventListeners) {\n return;\n }\n for (let i = 0, ii = eventListeners.length; i < ii; i++) {\n const evt = eventListeners[i];\n if (evt.listener === listener) {\n evt.rmAbort?.(); // Ensure that the `AbortSignal` listener is removed.\n eventListeners.splice(i, 1);\n return;\n }\n }\n }\n}\n\n/**\n * NOTE: Only used to support various PDF viewer tests in `mozilla-central`.\n */\nclass AutomationEventBus extends EventBus {\n dispatch(eventName, data) {\n if (typeof PDFJSDev !== \"undefined\" && !PDFJSDev.test(\"MOZCENTRAL\")) {\n throw new Error(\"Not implemented: AutomationEventBus.dispatch\");\n }\n super.dispatch(eventName, data);\n\n const detail = Object.create(null);\n if (data) {\n for (const key in data) {\n const value = data[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 detail[key] = value;\n }\n }\n const event = new CustomEvent(eventName, {\n bubbles: true,\n cancelable: true,\n detail,\n });\n document.dispatchEvent(event);\n }\n}\n\nexport { AutomationEventBus, EventBus, waitOnEventOrTimeout, WaitOnType };\n","/* Copyright 2024 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\n/** @typedef {import(\"./interfaces.js\").IL10n} IL10n */\n\nclass BaseExternalServices {\n constructor() {\n if (this.constructor === BaseExternalServices) {\n throw new Error(\"Cannot initialize BaseExternalServices.\");\n }\n }\n\n updateFindControlState(data) {}\n\n updateFindMatchesCount(data) {}\n\n initPassiveLoading() {}\n\n reportTelemetry(data) {}\n\n /**\n * @returns {Promise<IL10n>}\n */\n async createL10n() {\n throw new Error(\"Not implemented: createL10n\");\n }\n\n createScripting() {\n throw new Error(\"Not implemented: createScripting\");\n }\n\n updateEditorStates(data) {\n throw new Error(\"Not implemented: updateEditorStates\");\n }\n\n async getNimbusExperimentData() {}\n}\n\nexport { BaseExternalServices };\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 { AppOptions, OptionKind } from \"./app_options.js\";\n\n/**\n * BasePreferences - Abstract base class for storing persistent settings.\n * Used for settings that should be applied to all opened documents,\n * or every time the viewer is loaded.\n */\nclass BasePreferences {\n #browserDefaults = Object.freeze(\n typeof PDFJSDev === \"undefined\"\n ? AppOptions.getAll(OptionKind.BROWSER, /* defaultOnly = */ true)\n : PDFJSDev.eval(\"BROWSER_PREFERENCES\")\n );\n\n #defaults = Object.freeze(\n typeof PDFJSDev === \"undefined\"\n ? AppOptions.getAll(OptionKind.PREFERENCE, /* defaultOnly = */ true)\n : PDFJSDev.eval(\"DEFAULT_PREFERENCES\")\n );\n\n #prefs = Object.create(null);\n\n #initializedPromise = null;\n\n constructor() {\n if (this.constructor === BasePreferences) {\n throw new Error(\"Cannot initialize BasePreferences.\");\n }\n\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"CHROME\")) {\n Object.defineProperty(this, \"defaults\", {\n get() {\n return this.#defaults;\n },\n });\n }\n\n this.#initializedPromise = this._readFromStorage(this.#defaults).then(\n ({ browserPrefs, prefs }) => {\n const options = Object.create(null);\n\n for (const [name, val] of Object.entries(this.#browserDefaults)) {\n const prefVal = browserPrefs?.[name];\n options[name] = typeof prefVal === typeof val ? prefVal : val;\n }\n for (const [name, val] of Object.entries(this.#defaults)) {\n const prefVal = prefs?.[name];\n // Ignore preferences whose types don't match the default values.\n options[name] = this.#prefs[name] =\n typeof prefVal === typeof val ? prefVal : val;\n }\n AppOptions.setAll(options, /* init = */ true);\n\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n window.addEventListener(\"updatedPreference\", evt => {\n this.#updatePref(evt.detail);\n });\n }\n }\n );\n }\n\n /**\n * Stub function for writing preferences to storage.\n * @param {Object} prefObj The preferences that should be written to storage.\n * @returns {Promise} A promise that is resolved when the preference values\n * have been written.\n */\n async _writeToStorage(prefObj) {\n throw new Error(\"Not implemented: _writeToStorage\");\n }\n\n /**\n * Stub function for reading preferences from storage.\n * @param {Object} prefObj The preferences that should be read from storage.\n * @returns {Promise} A promise that is resolved with an {Object} containing\n * the preferences that have been read.\n */\n async _readFromStorage(prefObj) {\n throw new Error(\"Not implemented: _readFromStorage\");\n }\n\n #updatePref({ name, value }) {\n if (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"MOZCENTRAL\")) {\n throw new Error(\"Not implemented: #updatePref\");\n }\n\n if (name in this.#browserDefaults) {\n if (typeof value !== typeof this.#browserDefaults[name]) {\n return; // Invalid preference value.\n }\n } else if (name in this.#defaults) {\n if (typeof value !== typeof this.#defaults[name]) {\n return; // Invalid preference value.\n }\n this.#prefs[name] = value;\n } else {\n return; // Invalid preference.\n }\n AppOptions.set(name, value);\n }\n\n /**\n * Reset the preferences to their default values and update storage.\n * @returns {Promise} A promise that is resolved when the preference values\n * have been reset.\n */\n async reset() {\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n throw new Error(\"Please use `about:config` to change preferences.\");\n }\n await this.#initializedPromise;\n const oldPrefs = structuredClone(this.#prefs);\n\n this.#prefs = Object.create(null);\n try {\n await this._writeToStorage(this.#defaults);\n } catch (reason) {\n // Revert all preference values, since writing to storage failed.\n this.#prefs = oldPrefs;\n throw reason;\n }\n }\n\n /**\n * Set the value of a preference.\n * @param {string} name The name of the preference that should be changed.\n * @param {boolean|number|string} value The new value of the preference.\n * @returns {Promise} A promise that is resolved when the value has been set,\n * provided that the preference exists and the types match.\n */\n async set(name, value) {\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n throw new Error(\"Please use `about:config` to change preferences.\");\n }\n await this.#initializedPromise;\n const defaultValue = this.#defaults[name],\n oldPrefs = structuredClone(this.#prefs);\n\n if (defaultValue === undefined) {\n throw new Error(`Set preference: \"${name}\" is undefined.`);\n } else if (value === undefined) {\n throw new Error(\"Set preference: no value is specified.\");\n }\n const valueType = typeof value,\n defaultType = typeof defaultValue;\n\n if (valueType !== defaultType) {\n if (valueType === \"number\" && defaultType === \"string\") {\n value = value.toString();\n } else {\n throw new Error(\n `Set preference: \"${value}\" is a ${valueType}, expected a ${defaultType}.`\n );\n }\n } else if (valueType === \"number\" && !Number.isInteger(value)) {\n throw new Error(`Set preference: \"${value}\" must be an integer.`);\n }\n\n this.#prefs[name] = value;\n try {\n await this._writeToStorage(this.#prefs);\n } catch (reason) {\n // Revert all preference values, since writing to storage failed.\n this.#prefs = oldPrefs;\n throw reason;\n }\n }\n\n /**\n * Get the value of a preference.\n * @param {string} name The name of the preference whose value is requested.\n * @returns {Promise} A promise resolved with a {boolean|number|string}\n * containing the value of the preference.\n */\n async get(name) {\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n throw new Error(\"Not implemented: get\");\n }\n await this.#initializedPromise;\n const defaultValue = this.#defaults[name];\n\n if (defaultValue === undefined) {\n throw new Error(`Get preference: \"${name}\" is undefined.`);\n }\n return this.#prefs[name] ?? defaultValue;\n }\n\n get initializedPromise() {\n return this.#initializedPromise;\n }\n}\n\nexport { BasePreferences };\n","/**\n * The `FluentType` class is the base of Fluent's type system.\n *\n * Fluent types wrap JavaScript values and store additional configuration for\n * them, which can then be used in the `toString` method together with a proper\n * `Intl` formatter.\n */\nexport class FluentType {\n /**\n * Create a `FluentType` instance.\n *\n * @param value The JavaScript value to wrap.\n */\n constructor(value) {\n this.value = value;\n }\n /**\n * Unwrap the raw value stored by this `FluentType`.\n */\n valueOf() {\n return this.value;\n }\n}\n/**\n * A `FluentType` representing no correct value.\n */\nexport class FluentNone extends FluentType {\n /**\n * Create an instance of `FluentNone` with an optional fallback value.\n * @param value The fallback value of this `FluentNone`.\n */\n constructor(value = \"???\") {\n super(value);\n }\n /**\n * Format this `FluentNone` to the fallback string.\n */\n toString(scope) {\n return `{${this.value}}`;\n }\n}\n/**\n * A `FluentType` representing a number.\n *\n * A `FluentNumber` instance stores the number value of the number it\n * represents. It may also store an option bag of options which will be passed\n * to `Intl.NumerFormat` when the `FluentNumber` is formatted to a string.\n */\nexport class FluentNumber extends FluentType {\n /**\n * Create an instance of `FluentNumber` with options to the\n * `Intl.NumberFormat` constructor.\n *\n * @param value The number value of this `FluentNumber`.\n * @param opts Options which will be passed to `Intl.NumberFormat`.\n */\n constructor(value, opts = {}) {\n super(value);\n this.opts = opts;\n }\n /**\n * Format this `FluentNumber` to a string.\n */\n toString(scope) {\n try {\n const nf = scope.memoizeIntlObject(Intl.NumberFormat, this.opts);\n return nf.format(this.value);\n }\n catch (err) {\n scope.reportError(err);\n return this.value.toString(10);\n }\n }\n}\n/**\n * A `FluentType` representing a date and time.\n *\n * A `FluentDateTime` instance stores the number value of the date it\n * represents, as a numerical timestamp in milliseconds. It may also store an\n * option bag of options which will be passed to `Intl.DateTimeFormat` when the\n * `FluentDateTime` is formatted to a string.\n */\nexport class FluentDateTime extends FluentType {\n /**\n * Create an instance of `FluentDateTime` with options to the\n * `Intl.DateTimeFormat` constructor.\n *\n * @param value The number value of this `FluentDateTime`, in milliseconds.\n * @param opts Options which will be passed to `Intl.DateTimeFormat`.\n */\n constructor(value, opts = {}) {\n super(value);\n this.opts = opts;\n }\n /**\n * Format this `FluentDateTime` to a string.\n */\n toString(scope) {\n try {\n const dtf = scope.memoizeIntlObject(Intl.DateTimeFormat, this.opts);\n return dtf.format(this.value);\n }\n catch (err) {\n scope.reportError(err);\n return new Date(this.value).toISOString();\n }\n }\n}\n","/* global Intl */\n/**\n * @overview\n *\n * The role of the Fluent resolver is to format a `Pattern` to an instance of\n * `FluentValue`. For performance reasons, primitive strings are considered\n * such instances, too.\n *\n * Translations can contain references to other messages or variables,\n * conditional logic in form of select expressions, traits which describe their\n * grammatical features, and can use Fluent builtins which make use of the\n * `Intl` formatters to format numbers and dates into the bundle's languages.\n * See the documentation of the Fluent syntax for more information.\n *\n * In case of errors the resolver will try to salvage as much of the\n * translation as possible. In rare situations where the resolver didn't know\n * how to recover from an error it will return an instance of `FluentNone`.\n *\n * All expressions resolve to an instance of `FluentValue`. The caller should\n * use the `toString` method to convert the instance to a native value.\n *\n * Functions in this file pass around an instance of the `Scope` class, which\n * stores the data required for successful resolution and error recovery.\n */\nimport { FluentType, FluentNone, FluentNumber, FluentDateTime, } from \"./types.js\";\n/**\n * The maximum number of placeables which can be expanded in a single call to\n * `formatPattern`. The limit protects against the Billion Laughs and Quadratic\n * Blowup attacks. See https://msdn.microsoft.com/en-us/magazine/ee335713.aspx.\n */\nconst MAX_PLACEABLES = 100;\n/** Unicode bidi isolation characters. */\nconst FSI = \"\\u2068\";\nconst PDI = \"\\u2069\";\n/** Helper: match a variant key to the given selector. */\nfunction match(scope, selector, key) {\n if (key === selector) {\n // Both are strings.\n return true;\n }\n // XXX Consider comparing options too, e.g. minimumFractionDigits.\n if (key instanceof FluentNumber &&\n selector instanceof FluentNumber &&\n key.value === selector.value) {\n return true;\n }\n if (selector instanceof FluentNumber && typeof key === \"string\") {\n let category = scope\n .memoizeIntlObject(Intl.PluralRules, selector.opts)\n .select(selector.value);\n if (key === category) {\n return true;\n }\n }\n return false;\n}\n/** Helper: resolve the default variant from a list of variants. */\nfunction getDefault(scope, variants, star) {\n if (variants[star]) {\n return resolvePattern(scope, variants[star].value);\n }\n scope.reportError(new RangeError(\"No default\"));\n return new FluentNone();\n}\n/** Helper: resolve arguments to a call expression. */\nfunction getArguments(scope, args) {\n const positional = [];\n const named = Object.create(null);\n for (const arg of args) {\n if (arg.type === \"narg\") {\n named[arg.name] = resolveExpression(scope, arg.value);\n }\n else {\n positional.push(resolveExpression(scope, arg));\n }\n }\n return { positional, named };\n}\n/** Resolve an expression to a Fluent type. */\nfunction resolveExpression(scope, expr) {\n switch (expr.type) {\n case \"str\":\n return expr.value;\n case \"num\":\n return new FluentNumber(expr.value, {\n minimumFractionDigits: expr.precision,\n });\n case \"var\":\n return resolveVariableReference(scope, expr);\n case \"mesg\":\n return resolveMessageReference(scope, expr);\n case \"term\":\n return resolveTermReference(scope, expr);\n case \"func\":\n return resolveFunctionReference(scope, expr);\n case \"select\":\n return resolveSelectExpression(scope, expr);\n default:\n return new FluentNone();\n }\n}\n/** Resolve a reference to a variable. */\nfunction resolveVariableReference(scope, { name }) {\n let arg;\n if (scope.params) {\n // We're inside a TermReference. It's OK to reference undefined parameters.\n if (Object.prototype.hasOwnProperty.call(scope.params, name)) {\n arg = scope.params[name];\n }\n else {\n return new FluentNone(`$${name}`);\n }\n }\n else if (scope.args &&\n Object.prototype.hasOwnProperty.call(scope.args, name)) {\n // We're in the top-level Pattern or inside a MessageReference. Missing\n // variables references produce ReferenceErrors.\n arg = scope.args[name];\n }\n else {\n scope.reportError(new ReferenceError(`Unknown variable: $${name}`));\n return new FluentNone(`$${name}`);\n }\n // Return early if the argument already is an instance of FluentType.\n if (arg instanceof FluentType) {\n return arg;\n }\n // Convert the argument to a Fluent type.\n switch (typeof arg) {\n case \"string\":\n return arg;\n case \"number\":\n return new FluentNumber(arg);\n case \"object\":\n if (arg instanceof Date) {\n return new FluentDateTime(arg.getTime());\n }\n // eslint-disable-next-line no-fallthrough\n default:\n scope.reportError(new TypeError(`Variable type not supported: $${name}, ${typeof arg}`));\n return new FluentNone(`$${name}`);\n }\n}\n/** Resolve a reference to another message. */\nfunction resolveMessageReference(scope, { name, attr }) {\n const message = scope.bundle._messages.get(name);\n if (!message) {\n scope.reportError(new ReferenceError(`Unknown message: ${name}`));\n return new FluentNone(name);\n }\n if (attr) {\n const attribute = message.attributes[attr];\n if (attribute) {\n return resolvePattern(scope, attribute);\n }\n scope.reportError(new ReferenceError(`Unknown attribute: ${attr}`));\n return new FluentNone(`${name}.${attr}`);\n }\n if (message.value) {\n return resolvePattern(scope, message.value);\n }\n scope.reportError(new ReferenceError(`No value: ${name}`));\n return new FluentNone(name);\n}\n/** Resolve a call to a Term with key-value arguments. */\nfunction resolveTermReference(scope, { name, attr, args }) {\n const id = `-${name}`;\n const term = scope.bundle._terms.get(id);\n if (!term) {\n scope.reportError(new ReferenceError(`Unknown term: ${id}`));\n return new FluentNone(id);\n }\n if (attr) {\n const attribute = term.attributes[attr];\n if (attribute) {\n // Every TermReference has its own variables.\n scope.params = getArguments(scope, args).named;\n const resolved = resolvePattern(scope, attribute);\n scope.params = null;\n return resolved;\n }\n scope.reportError(new ReferenceError(`Unknown attribute: ${attr}`));\n return new FluentNone(`${id}.${attr}`);\n }\n scope.params = getArguments(scope, args).named;\n const resolved = resolvePattern(scope, term.value);\n scope.params = null;\n return resolved;\n}\n/** Resolve a call to a Function with positional and key-value arguments. */\nfunction resolveFunctionReference(scope, { name, args }) {\n // Some functions are built-in. Others may be provided by the runtime via\n // the `FluentBundle` constructor.\n let func = scope.bundle._functions[name];\n if (!func) {\n scope.reportError(new ReferenceError(`Unknown function: ${name}()`));\n return new FluentNone(`${name}()`);\n }\n if (typeof func !== \"function\") {\n scope.reportError(new TypeError(`Function ${name}() is not callable`));\n return new FluentNone(`${name}()`);\n }\n try {\n let resolved = getArguments(scope, args);\n return func(resolved.positional, resolved.named);\n }\n catch (err) {\n scope.reportError(err);\n return new FluentNone(`${name}()`);\n }\n}\n/** Resolve a select expression to the member object. */\nfunction resolveSelectExpression(scope, { selector, variants, star }) {\n let sel = resolveExpression(scope, selector);\n if (sel instanceof FluentNone) {\n return getDefault(scope, variants, star);\n }\n // Match the selector against keys of each variant, in order.\n for (const variant of variants) {\n const key = resolveExpression(scope, variant.key);\n if (match(scope, sel, key)) {\n return resolvePattern(scope, variant.value);\n }\n }\n return getDefault(scope, variants, star);\n}\n/** Resolve a pattern (a complex string with placeables). */\nexport function resolveComplexPattern(scope, ptn) {\n if (scope.dirty.has(ptn)) {\n scope.reportError(new RangeError(\"Cyclic reference\"));\n return new FluentNone();\n }\n // Tag the pattern as dirty for the purpose of the current resolution.\n scope.dirty.add(ptn);\n const result = [];\n // Wrap interpolations with Directional Isolate Formatting characters\n // only when the pattern has more than one element.\n const useIsolating = scope.bundle._useIsolating && ptn.length > 1;\n for (const elem of ptn) {\n if (typeof elem === \"string\") {\n result.push(scope.bundle._transform(elem));\n continue;\n }\n scope.placeables++;\n if (scope.placeables > MAX_PLACEABLES) {\n scope.dirty.delete(ptn);\n // This is a fatal error which causes the resolver to instantly bail out\n // on this pattern. The length check protects against excessive memory\n // usage, and throwing protects against eating up the CPU when long\n // placeables are deeply nested.\n throw new RangeError(`Too many placeables expanded: ${scope.placeables}, ` +\n `max allowed is ${MAX_PLACEABLES}`);\n }\n if (useIsolating) {\n result.push(FSI);\n }\n result.push(resolveExpression(scope, elem).toString(scope));\n if (useIsolating) {\n result.push(PDI);\n }\n }\n scope.dirty.delete(ptn);\n return result.join(\"\");\n}\n/**\n * Resolve a simple or a complex Pattern to a FluentString\n * (which is really the string primitive).\n */\nfunction resolvePattern(scope, value) {\n // Resolve a simple pattern.\n if (typeof value === \"string\") {\n return scope.bundle._transform(value);\n }\n return resolveComplexPattern(scope, value);\n}\n","export class Scope {\n constructor(bundle, errors, args) {\n /**\n * The Set of patterns already encountered during this resolution.\n * Used to detect and prevent cyclic resolutions.\n * @ignore\n */\n this.dirty = new WeakSet();\n /** A dict of parameters passed to a TermReference. */\n this.params = null;\n /**\n * The running count of placeables resolved so far.\n * Used to detect the Billion Laughs and Quadratic Blowup attacks.\n * @ignore\n */\n this.placeables = 0;\n this.bundle = bundle;\n this.errors = errors;\n this.args = args;\n }\n reportError(error) {\n if (!this.errors || !(error instanceof Error)) {\n throw error;\n }\n this.errors.push(error);\n }\n memoizeIntlObject(ctor, opts) {\n let cache = this.bundle._intls.get(ctor);\n if (!cache) {\n cache = {};\n this.bundle._intls.set(ctor, cache);\n }\n let id = JSON.stringify(opts);\n if (!cache[id]) {\n cache[id] = new ctor(this.bundle.locales, opts);\n }\n return cache[id];\n }\n}\n","/**\n * @overview\n *\n * The FTL resolver ships with a number of functions built-in.\n *\n * Each function take two arguments:\n * - args - an array of positional args\n * - opts - an object of key-value args\n *\n * Arguments to functions are guaranteed to already be instances of\n * `FluentValue`. Functions must return `FluentValues` as well.\n */\nimport { FluentNone, FluentNumber, FluentDateTime, } from \"./types.js\";\nfunction values(opts, allowed) {\n const unwrapped = Object.create(null);\n for (const [name, opt] of Object.entries(opts)) {\n if (allowed.includes(name)) {\n unwrapped[name] = opt.valueOf();\n }\n }\n return unwrapped;\n}\nconst NUMBER_ALLOWED = [\n \"unitDisplay\",\n \"currencyDisplay\",\n \"useGrouping\",\n \"minimumIntegerDigits\",\n \"minimumFractionDigits\",\n \"maximumFractionDigits\",\n \"minimumSignificantDigits\",\n \"maximumSignificantDigits\",\n];\n/**\n * The implementation of the `NUMBER()` builtin available to translations.\n *\n * Translations may call the `NUMBER()` builtin in order to specify formatting\n * options of a number. For example:\n *\n * pi = The value of π is {NUMBER($pi, maximumFractionDigits: 2)}.\n *\n * The implementation expects an array of `FluentValues` representing the\n * positional arguments, and an object of named `FluentValues` representing the\n * named parameters.\n *\n * The following options are recognized:\n *\n * unitDisplay\n * currencyDisplay\n * useGrouping\n * minimumIntegerDigits\n * minimumFractionDigits\n * maximumFractionDigits\n * minimumSignificantDigits\n * maximumSignificantDigits\n *\n * Other options are ignored.\n *\n * @param args The positional arguments passed to this `NUMBER()`.\n * @param opts The named argments passed to this `NUMBER()`.\n */\nexport function NUMBER(args, opts) {\n let arg = args[0];\n if (arg instanceof FluentNone) {\n return new FluentNone(`NUMBER(${arg.valueOf()})`);\n }\n if (arg instanceof FluentNumber) {\n return new FluentNumber(arg.valueOf(), {\n ...arg.opts,\n ...values(opts, NUMBER_ALLOWED),\n });\n }\n if (arg instanceof FluentDateTime) {\n return new FluentNumber(arg.valueOf(), {\n ...values(opts, NUMBER_ALLOWED),\n });\n }\n throw new TypeError(\"Invalid argument to NUMBER\");\n}\nconst DATETIME_ALLOWED = [\n \"dateStyle\",\n \"timeStyle\",\n \"fractionalSecondDigits\",\n \"dayPeriod\",\n \"hour12\",\n \"weekday\",\n \"era\",\n \"year\",\n \"month\",\n \"day\",\n \"hour\",\n \"minute\",\n \"second\",\n \"timeZoneName\",\n];\n/**\n * The implementation of the `DATETIME()` builtin available to translations.\n *\n * Translations may call the `DATETIME()` builtin in order to specify\n * formatting options of a number. For example:\n *\n * now = It's {DATETIME($today, month: \"long\")}.\n *\n * The implementation expects an array of `FluentValues` representing the\n * positional arguments, and an object of named `FluentValues` representing the\n * named parameters.\n *\n * The following options are recognized:\n *\n * dateStyle\n * timeStyle\n * fractionalSecondDigits\n * dayPeriod\n * hour12\n * weekday\n * era\n * year\n * month\n * day\n * hour\n * minute\n * second\n * timeZoneName\n *\n * Other options are ignored.\n *\n * @param args The positional arguments passed to this `DATETIME()`.\n * @param opts The named argments passed to this `DATETIME()`.\n */\nexport function DATETIME(args, opts) {\n let arg = args[0];\n if (arg instanceof FluentNone) {\n return new FluentNone(`DATETIME(${arg.valueOf()})`);\n }\n if (arg instanceof FluentDateTime) {\n return new FluentDateTime(arg.valueOf(), {\n ...arg.opts,\n ...values(opts, DATETIME_ALLOWED),\n });\n }\n if (arg instanceof FluentNumber) {\n return new FluentDateTime(arg.valueOf(), {\n ...values(opts, DATETIME_ALLOWED),\n });\n }\n throw new TypeError(\"Invalid argument to DATETIME\");\n}\n","const cache = new Map();\nexport function getMemoizerForLocale(locales) {\n const stringLocale = Array.isArray(locales) ? locales.join(\" \") : locales;\n let memoizer = cache.get(stringLocale);\n if (memoizer === undefined) {\n memoizer = new Map();\n cache.set(stringLocale, memoizer);\n }\n return memoizer;\n}\n","import { resolveComplexPattern } from \"./resolver.js\";\nimport { Scope } from \"./scope.js\";\nimport { FluentNone } from \"./types.js\";\nimport { NUMBER, DATETIME } from \"./builtins.js\";\nimport { getMemoizerForLocale } from \"./memoizer.js\";\n/**\n * Message bundles are single-language stores of translation resources. They are\n * responsible for formatting message values and attributes to strings.\n */\nexport class FluentBundle {\n /**\n * Create an instance of `FluentBundle`.\n *\n * @example\n * ```js\n * let bundle = new FluentBundle([\"en-US\", \"en\"]);\n *\n * let bundle = new FluentBundle(locales, {useIsolating: false});\n *\n * let bundle = new FluentBundle(locales, {\n * useIsolating: true,\n * functions: {\n * NODE_ENV: () => process.env.NODE_ENV\n * }\n * });\n * ```\n *\n * @param locales - Used to instantiate `Intl` formatters used by translations.\n * @param options - Optional configuration for the bundle.\n */\n constructor(locales, { functions, useIsolating = true, transform = (v) => v, } = {}) {\n /** @ignore */\n this._terms = new Map();\n /** @ignore */\n this._messages = new Map();\n this.locales = Array.isArray(locales) ? locales : [locales];\n this._functions = {\n NUMBER,\n DATETIME,\n ...functions,\n };\n this._useIsolating = useIsolating;\n this._transform = transform;\n this._intls = getMemoizerForLocale(locales);\n }\n /**\n * Check if a message is present in the bundle.\n *\n * @param id - The identifier of the message to check.\n */\n hasMessage(id) {\n return this._messages.has(id);\n }\n /**\n * Return a raw unformatted message object from the bundle.\n *\n * Raw messages are `{value, attributes}` shapes containing translation units\n * called `Patterns`. `Patterns` are implementation-specific; they should be\n * treated as black boxes and formatted with `FluentBundle.formatPattern`.\n *\n * @param id - The identifier of the message to check.\n */\n getMessage(id) {\n return this._messages.get(id);\n }\n /**\n * Add a translation resource to the bundle.\n *\n * @example\n * ```js\n * let res = new FluentResource(\"foo = Foo\");\n * bundle.addResource(res);\n * bundle.getMessage(\"foo\");\n * // → {value: .., attributes: {..}}\n * ```\n *\n * @param res\n * @param options\n */\n addResource(res, { allowOverrides = false, } = {}) {\n const errors = [];\n for (let i = 0; i < res.body.length; i++) {\n let entry = res.body[i];\n if (entry.id.startsWith(\"-\")) {\n // Identifiers starting with a dash (-) define terms. Terms are private\n // and cannot be retrieved from FluentBundle.\n if (allowOverrides === false && this._terms.has(entry.id)) {\n errors.push(new Error(`Attempt to override an existing term: \"${entry.id}\"`));\n continue;\n }\n this._terms.set(entry.id, entry);\n }\n else {\n if (allowOverrides === false && this._messages.has(entry.id)) {\n errors.push(new Error(`Attempt to override an existing message: \"${entry.id}\"`));\n continue;\n }\n this._messages.set(entry.id, entry);\n }\n }\n return errors;\n }\n /**\n * Format a `Pattern` to a string.\n *\n * Format a raw `Pattern` into a string. `args` will be used to resolve\n * references to variables passed as arguments to the translation.\n *\n * In case of errors `formatPattern` will try to salvage as much of the\n * translation as possible and will still return a string. For performance\n * reasons, the encountered errors are not returned but instead are appended\n * to the `errors` array passed as the third argument.\n *\n * If `errors` is omitted, the first encountered error will be thrown.\n *\n * @example\n * ```js\n * let errors = [];\n * bundle.addResource(\n * new FluentResource(\"hello = Hello, {$name}!\"));\n *\n * let hello = bundle.getMessage(\"hello\");\n * if (hello.value) {\n * bundle.formatPattern(hello.value, {name: \"Jane\"}, errors);\n * // Returns \"Hello, Jane!\" and `errors` is empty.\n *\n * bundle.formatPattern(hello.value, undefined, errors);\n * // Returns \"Hello, {$name}!\" and `errors` is now:\n * // [<ReferenceError: Unknown variable: name>]\n * }\n * ```\n */\n formatPattern(pattern, args = null, errors = null) {\n // Resolve a simple pattern without creating a scope. No error handling is\n // required; by definition simple patterns don't have placeables.\n if (typeof pattern === \"string\") {\n return this._transform(pattern);\n }\n // Resolve a complex pattern.\n let scope = new Scope(this, errors, args);\n try {\n let value = resolveComplexPattern(scope, pattern);\n return value.toString(scope);\n }\n catch (err) {\n if (scope.errors && err instanceof Error) {\n scope.errors.push(err);\n return new FluentNone().toString(scope);\n }\n throw err;\n }\n }\n}\n","// This regex is used to iterate through the beginnings of messages and terms.\n// With the /m flag, the ^ matches at the beginning of every line.\nconst RE_MESSAGE_START = /^(-?[a-zA-Z][\\w-]*) *= */gm;\n// Both Attributes and Variants are parsed in while loops. These regexes are\n// used to break out of them.\nconst RE_ATTRIBUTE_START = /\\.([a-zA-Z][\\w-]*) *= */y;\nconst RE_VARIANT_START = /\\*?\\[/y;\nconst RE_NUMBER_LITERAL = /(-?[0-9]+(?:\\.([0-9]+))?)/y;\nconst RE_IDENTIFIER = /([a-zA-Z][\\w-]*)/y;\nconst RE_REFERENCE = /([$-])?([a-zA-Z][\\w-]*)(?:\\.([a-zA-Z][\\w-]*))?/y;\nconst RE_FUNCTION_NAME = /^[A-Z][A-Z0-9_-]*$/;\n// A \"run\" is a sequence of text or string literal characters which don't\n// require any special handling. For TextElements such special characters are: {\n// (starts a placeable), and line breaks which require additional logic to check\n// if the next line is indented. For StringLiterals they are: \\ (starts an\n// escape sequence), \" (ends the literal), and line breaks which are not allowed\n// in StringLiterals. Note that string runs may be empty; text runs may not.\nconst RE_TEXT_RUN = /([^{}\\n\\r]+)/y;\nconst RE_STRING_RUN = /([^\\\\\"\\n\\r]*)/y;\n// Escape sequences.\nconst RE_STRING_ESCAPE = /\\\\([\\\\\"])/y;\nconst RE_UNICODE_ESCAPE = /\\\\u([a-fA-F0-9]{4})|\\\\U([a-fA-F0-9]{6})/y;\n// Used for trimming TextElements and indents.\nconst RE_LEADING_NEWLINES = /^\\n+/;\nconst RE_TRAILING_SPACES = / +$/;\n// Used in makeIndent to strip spaces from blank lines and normalize CRLF to LF.\nconst RE_BLANK_LINES = / *\\r?\\n/g;\n// Used in makeIndent to measure the indentation.\nconst RE_INDENT = /( *)$/;\n// Common tokens.\nconst TOKEN_BRACE_OPEN = /{\\s*/y;\nconst TOKEN_BRACE_CLOSE = /\\s*}/y;\nconst TOKEN_BRACKET_OPEN = /\\[\\s*/y;\nconst TOKEN_BRACKET_CLOSE = /\\s*] */y;\nconst TOKEN_PAREN_OPEN = /\\s*\\(\\s*/y;\nconst TOKEN_ARROW = /\\s*->\\s*/y;\nconst TOKEN_COLON = /\\s*:\\s*/y;\n// Note the optional comma. As a deviation from the Fluent EBNF, the parser\n// doesn't enforce commas between call arguments.\nconst TOKEN_COMMA = /\\s*,?\\s*/y;\nconst TOKEN_BLANK = /\\s+/y;\n/**\n * Fluent Resource is a structure storing parsed localization entries.\n */\nexport class FluentResource {\n constructor(source) {\n this.body = [];\n RE_MESSAGE_START.lastIndex = 0;\n let cursor = 0;\n // Iterate over the beginnings of messages and terms to efficiently skip\n // comments and recover from errors.\n while (true) {\n let next = RE_MESSAGE_START.exec(source);\n if (next === null) {\n break;\n }\n cursor = RE_MESSAGE_START.lastIndex;\n try {\n this.body.push(parseMessage(next[1]));\n }\n catch (err) {\n if (err instanceof SyntaxError) {\n // Don't report any Fluent syntax errors. Skip directly to the\n // beginning of the next message or term.\n continue;\n }\n throw err;\n }\n }\n // The parser implementation is inlined below for performance reasons,\n // as well as for convenience of accessing `source` and `cursor`.\n // The parser focuses on minimizing the number of false negatives at the\n // expense of increasing the risk of false positives. In other words, it\n // aims at parsing valid Fluent messages with a success rate of 100%, but it\n // may also parse a few invalid messages which the reference parser would\n // reject. The parser doesn't perform any validation and may produce entries\n // which wouldn't make sense in the real world. For best results users are\n // advised to validate translations with the fluent-syntax parser\n // pre-runtime.\n // The parser makes an extensive use of sticky regexes which can be anchored\n // to any offset of the source string without slicing it. Errors are thrown\n // to bail out of parsing of ill-formed messages.\n function test(re) {\n re.lastIndex = cursor;\n return re.test(source);\n }\n // Advance the cursor by the char if it matches. May be used as a predicate\n // (was the match found?) or, if errorClass is passed, as an assertion.\n function consumeChar(char, errorClass) {\n if (source[cursor] === char) {\n cursor++;\n return true;\n }\n if (errorClass) {\n throw new errorClass(`Expected ${char}`);\n }\n return false;\n }\n // Advance the cursor by the token if it matches. May be used as a predicate\n // (was the match found?) or, if errorClass is passed, as an assertion.\n function consumeToken(re, errorClass) {\n if (test(re)) {\n cursor = re.lastIndex;\n return true;\n }\n if (errorClass) {\n throw new errorClass(`Expected ${re.toString()}`);\n }\n return false;\n }\n // Execute a regex, advance the cursor, and return all capture groups.\n function match(re) {\n re.lastIndex = cursor;\n let result = re.exec(source);\n if (result === null) {\n throw new SyntaxError(`Expected ${re.toString()}`);\n }\n cursor = re.lastIndex;\n return result;\n }\n // Execute a regex, advance the cursor, and return the capture group.\n function match1(re) {\n return match(re)[1];\n }\n function parseMessage(id) {\n let value = parsePattern();\n let attributes = parseAttributes();\n if (value === null && Object.keys(attributes).length === 0) {\n throw new SyntaxError(\"Expected message value or attributes\");\n }\n return { id, value, attributes };\n }\n function parseAttributes() {\n let attrs = Object.create(null);\n while (test(RE_ATTRIBUTE_START)) {\n let name = match1(RE_ATTRIBUTE_START);\n let value = parsePattern();\n if (value === null) {\n throw new SyntaxError(\"Expected attribute value\");\n }\n attrs[name] = value;\n }\n return attrs;\n }\n function parsePattern() {\n let first;\n // First try to parse any simple text on the same line as the id.\n if (test(RE_TEXT_RUN)) {\n first = match1(RE_TEXT_RUN);\n }\n // If there's a placeable on the first line, parse a complex pattern.\n if (source[cursor] === \"{\" || source[cursor] === \"}\") {\n // Re-use the text parsed above, if possible.\n return parsePatternElements(first ? [first] : [], Infinity);\n }\n // RE_TEXT_VALUE stops at newlines. Only continue parsing the pattern if\n // what comes after the newline is indented.\n let indent = parseIndent();\n if (indent) {\n if (first) {\n // If there's text on the first line, the blank block is part of the\n // translation content in its entirety.\n return parsePatternElements([first, indent], indent.length);\n }\n // Otherwise, we're dealing with a block pattern, i.e. a pattern which\n // starts on a new line. Discrad the leading newlines but keep the\n // inline indent; it will be used by the dedentation logic.\n indent.value = trim(indent.value, RE_LEADING_NEWLINES);\n return parsePatternElements([indent], indent.length);\n }\n if (first) {\n // It was just a simple inline text after all.\n return trim(first, RE_TRAILING_SPACES);\n }\n return null;\n }\n // Parse a complex pattern as an array of elements.\n function parsePatternElements(elements = [], commonIndent) {\n while (true) {\n if (test(RE_TEXT_RUN)) {\n elements.push(match1(RE_TEXT_RUN));\n continue;\n }\n if (source[cursor] === \"{\") {\n elements.push(parsePlaceable());\n continue;\n }\n if (source[cursor] === \"}\") {\n throw new SyntaxError(\"Unbalanced closing brace\");\n }\n let indent = parseIndent();\n if (indent) {\n elements.push(indent);\n commonIndent = Math.min(commonIndent, indent.length);\n continue;\n }\n break;\n }\n let lastIndex = elements.length - 1;\n let lastElement = elements[lastIndex];\n // Trim the trailing spaces in the last element if it's a TextElement.\n if (typeof lastElement === \"string\") {\n elements[lastIndex] = trim(lastElement, RE_TRAILING_SPACES);\n }\n let baked = [];\n for (let element of elements) {\n if (element instanceof Indent) {\n // Dedent indented lines by the maximum common indent.\n element = element.value.slice(0, element.value.length - commonIndent);\n }\n if (element) {\n baked.push(element);\n }\n }\n return baked;\n }\n function parsePlaceable() {\n consumeToken(TOKEN_BRACE_OPEN, SyntaxError);\n let selector = parseInlineExpression();\n if (consumeToken(TOKEN_BRACE_CLOSE)) {\n return selector;\n }\n if (consumeToken(TOKEN_ARROW)) {\n let variants = parseVariants();\n consumeToken(TOKEN_BRACE_CLOSE, SyntaxError);\n return {\n type: \"select\",\n selector,\n ...variants,\n };\n }\n throw new SyntaxError(\"Unclosed placeable\");\n }\n function parseInlineExpression() {\n if (source[cursor] === \"{\") {\n // It's a nested placeable.\n return parsePlaceable();\n }\n if (test(RE_REFERENCE)) {\n let [, sigil, name, attr = null] = match(RE_REFERENCE);\n if (sigil === \"$\") {\n return { type: \"var\", name };\n }\n if (consumeToken(TOKEN_PAREN_OPEN)) {\n let args = parseArguments();\n if (sigil === \"-\") {\n // A parameterized term: -term(...).\n return { type: \"term\", name, attr, args };\n }\n if (RE_FUNCTION_NAME.test(name)) {\n return { type: \"func\", name, args };\n }\n throw new SyntaxError(\"Function names must be all upper-case\");\n }\n if (sigil === \"-\") {\n // A non-parameterized term: -term.\n return {\n type: \"term\",\n name,\n attr,\n args: [],\n };\n }\n return { type: \"mesg\", name, attr };\n }\n return parseLiteral();\n }\n function parseArguments() {\n let args = [];\n while (true) {\n switch (source[cursor]) {\n case \")\": // End of the argument list.\n cursor++;\n return args;\n case undefined: // EOF\n throw new SyntaxError(\"Unclosed argument list\");\n }\n args.push(parseArgument());\n // Commas between arguments are treated as whitespace.\n consumeToken(TOKEN_COMMA);\n }\n }\n function parseArgument() {\n let expr = parseInlineExpression();\n if (expr.type !== \"mesg\") {\n return expr;\n }\n if (consumeToken(TOKEN_COLON)) {\n // The reference is the beginning of a named argument.\n return {\n type: \"narg\",\n name: expr.name,\n value: parseLiteral(),\n };\n }\n // It's a regular message reference.\n return expr;\n }\n function parseVariants() {\n let variants = [];\n let count = 0;\n let star;\n while (test(RE_VARIANT_START)) {\n if (consumeChar(\"*\")) {\n star = count;\n }\n let key = parseVariantKey();\n let value = parsePattern();\n if (value === null) {\n throw new SyntaxError(\"Expected variant value\");\n }\n variants[count++] = { key, value };\n }\n if (count === 0) {\n return null;\n }\n if (star === undefined) {\n throw new SyntaxError(\"Expected default variant\");\n }\n return { variants, star };\n }\n function parseVariantKey() {\n consumeToken(TOKEN_BRACKET_OPEN, SyntaxError);\n let key;\n if (test(RE_NUMBER_LITERAL)) {\n key = parseNumberLiteral();\n }\n else {\n key = {\n type: \"str\",\n value: match1(RE_IDENTIFIER),\n };\n }\n consumeToken(TOKEN_BRACKET_CLOSE, SyntaxError);\n return key;\n }\n function parseLiteral() {\n if (test(RE_NUMBER_LITERAL)) {\n return parseNumberLiteral();\n }\n if (source[cursor] === '\"') {\n return parseStringLiteral();\n }\n throw new SyntaxError(\"Invalid expression\");\n }\n function parseNumberLiteral() {\n let [, value, fraction = \"\"] = match(RE_NUMBER_LITERAL);\n let precision = fraction.length;\n return {\n type: \"num\",\n value: parseFloat(value),\n precision,\n };\n }\n function parseStringLiteral() {\n consumeChar('\"', SyntaxError);\n let value = \"\";\n while (true) {\n value += match1(RE_STRING_RUN);\n if (source[cursor] === \"\\\\\") {\n value += parseEscapeSequence();\n continue;\n }\n if (consumeChar('\"')) {\n return { type: \"str\", value };\n }\n // We've reached an EOL of EOF.\n throw new SyntaxError(\"Unclosed string literal\");\n }\n }\n // Unescape known escape sequences.\n function parseEscapeSequence() {\n if (test(RE_STRING_ESCAPE)) {\n return match1(RE_STRING_ESCAPE);\n }\n if (test(RE_UNICODE_ESCAPE)) {\n let [, codepoint4, codepoint6] = match(RE_UNICODE_ESCAPE);\n let codepoint = parseInt(codepoint4 || codepoint6, 16);\n return codepoint <= 0xd7ff || 0xe000 <= codepoint\n ? // It's a Unicode scalar value.\n String.fromCodePoint(codepoint)\n : // Lonely surrogates can cause trouble when the parsing result is\n // saved using UTF-8. Use U+FFFD REPLACEMENT CHARACTER instead.\n \"<22>\";\n }\n throw new SyntaxError(\"Unknown escape sequence\");\n }\n // Parse blank space. Return it if it looks like indent before a pattern\n // line. Skip it othwerwise.\n function parseIndent() {\n let start = cursor;\n consumeToken(TOKEN_BLANK);\n // Check the first non-blank character after the indent.\n switch (source[cursor]) {\n case \".\":\n case \"[\":\n case \"*\":\n case \"}\":\n case undefined: // EOF\n // A special character. End the Pattern.\n return false;\n case \"{\":\n // Placeables don't require indentation (in EBNF: block-placeable).\n // Continue the Pattern.\n return makeIndent(source.slice(start, cursor));\n }\n // If the first character on the line is not one of the special characters\n // listed above, it's a regular text character. Check if there's at least\n // one space of indent before it.\n if (source[cursor - 1] === \" \") {\n // It's an indented text character (in EBNF: indented-char). Continue\n // the Pattern.\n return makeIndent(source.slice(start, cursor));\n }\n // A not-indented text character is likely the identifier of the next\n // message. End the Pattern.\n return false;\n }\n // Trim blanks in text according to the given regex.\n function trim(text, re) {\n return text.replace(re, \"\");\n }\n // Normalize a blank block and extract the indent details.\n function makeIndent(blank) {\n let value = blank.replace(RE_BLANK_LINES, \"\\n\");\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n let length = RE_INDENT.exec(blank)[1].length;\n return new Indent(value, length);\n }\n }\n}\nclass Indent {\n constructor(value, length) {\n this.value = value;\n this.length = length;\n }\n}\n","/**\n * @module fluent\n * @overview\n *\n * `fluent` is a JavaScript implementation of Project Fluent, a localization\n * framework designed to unleash the expressive power of the natural language.\n *\n */\nexport { FluentBundle } from \"./bundle.js\";\nexport { FluentResource } from \"./resource.js\";\nexport { FluentType, FluentNone, FluentNumber, FluentDateTime, } from \"./types.js\";\n","/* eslint no-console: [\"error\", {allow: [\"warn\"]}] */\n/* global console */\n// Match the opening angle bracket (<) in HTML tags, and HTML entities like\n// &amp;, &#0038;, &#x0026;.\nconst reOverlay = /<|&#?\\w+;/;\n/**\n * Elements allowed in translations even if they are not present in the source\n * HTML. They are text-level elements as defined by the HTML5 spec:\n * https://www.w3.org/TR/html5/text-level-semantics.html with the exception of:\n *\n * - a - because we don't allow href on it anyways,\n * - ruby, rt, rp - because we don't allow nested elements to be inserted.\n */\nconst TEXT_LEVEL_ELEMENTS = {\n \"http://www.w3.org/1999/xhtml\": [\n \"em\",\n \"strong\",\n \"small\",\n \"s\",\n \"cite\",\n \"q\",\n \"dfn\",\n \"abbr\",\n \"data\",\n \"time\",\n \"code\",\n \"var\",\n \"samp\",\n \"kbd\",\n \"sub\",\n \"sup\",\n \"i\",\n \"b\",\n \"u\",\n \"mark\",\n \"bdi\",\n \"bdo\",\n \"span\",\n \"br\",\n \"wbr\",\n ],\n};\nconst LOCALIZABLE_ATTRIBUTES = {\n \"http://www.w3.org/1999/xhtml\": {\n global: [\"title\", \"aria-label\", \"aria-valuetext\"],\n a: [\"download\"],\n area: [\"download\", \"alt\"],\n // value is special-cased in isAttrNameLocalizable\n input: [\"alt\", \"placeholder\"],\n menuitem: [\"label\"],\n menu: [\"label\"],\n optgroup: [\"label\"],\n option: [\"label\"],\n track: [\"label\"],\n img: [\"alt\"],\n textarea: [\"placeholder\"],\n th: [\"abbr\"],\n },\n \"http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul\": {\n global: [\n \"accesskey\",\n \"aria-label\",\n \"aria-valuetext\",\n \"label\",\n \"title\",\n \"tooltiptext\",\n ],\n description: [\"value\"],\n key: [\"key\", \"keycode\"],\n label: [\"value\"],\n textbox: [\"placeholder\", \"value\"],\n },\n};\n/**\n * Translate an element.\n *\n * Translate the element's text content and attributes. Some HTML markup is\n * allowed in the translation. The element's children with the data-l10n-name\n * attribute will be treated as arguments to the translation. If the\n * translation defines the same children, their attributes and text contents\n * will be used for translating the matching source child.\n *\n * @param {Element} element\n * @param {Object} translation\n * @private\n */\nexport default function translateElement(element, translation) {\n const { value } = translation;\n if (typeof value === \"string\") {\n if (element.localName === \"title\" &&\n element.namespaceURI === \"http://www.w3.org/1999/xhtml\") {\n // A special case for the HTML title element whose content must be text.\n element.textContent = value;\n }\n else if (!reOverlay.test(value)) {\n // If the translation doesn't contain any markup skip the overlay logic.\n element.textContent = value;\n }\n else {\n // Else parse the translation's HTML using an inert template element,\n // sanitize it and replace the element's content.\n const templateElement = element.ownerDocument.createElementNS(\"http://www.w3.org/1999/xhtml\", \"template\");\n templateElement.innerHTML = value;\n overlayChildNodes(templateElement.content, element);\n }\n }\n // Even if the translation doesn't define any localizable attributes, run\n // overlayAttributes to remove any localizable attributes set by previous\n // translations.\n overlayAttributes(translation, element);\n}\n/**\n * Replace child nodes of an element with child nodes of another element.\n *\n * The contents of the target element will be cleared and fully replaced with\n * sanitized contents of the source element.\n *\n * @param {DocumentFragment} fromFragment - The source of children to overlay.\n * @param {Element} toElement - The target of the overlay.\n * @private\n */\nfunction overlayChildNodes(fromFragment, toElement) {\n for (const childNode of fromFragment.childNodes) {\n if (childNode.nodeType === childNode.TEXT_NODE) {\n // Keep the translated text node.\n continue;\n }\n if (childNode.hasAttribute(\"data-l10n-name\")) {\n const sanitized = getNodeForNamedElement(toElement, childNode);\n fromFragment.replaceChild(sanitized, childNode);\n continue;\n }\n if (isElementAllowed(childNode)) {\n const sanitized = createSanitizedElement(childNode);\n fromFragment.replaceChild(sanitized, childNode);\n continue;\n }\n console.warn(`An element of forbidden type \"${childNode.localName}\" was found in ` +\n \"the translation. Only safe text-level elements and elements with \" +\n \"data-l10n-name are allowed.\");\n // If all else fails, replace the element with its text content.\n fromFragment.replaceChild(createTextNodeFromTextContent(childNode), childNode);\n }\n toElement.textContent = \"\";\n toElement.appendChild(fromFragment);\n}\nfunction hasAttribute(attributes, name) {\n if (!attributes) {\n return false;\n }\n for (let attr of attributes) {\n if (attr.name === name) {\n return true;\n }\n }\n return false;\n}\n/**\n * Transplant localizable attributes of an element to another element.\n *\n * Any localizable attributes already set on the target element will be\n * cleared.\n *\n * @param {Element|Object} fromElement - The source of child nodes to overlay.\n * @param {Element} toElement - The target of the overlay.\n * @private\n */\nfunction overlayAttributes(fromElement, toElement) {\n const explicitlyAllowed = toElement.hasAttribute(\"data-l10n-attrs\")\n ? toElement\n .getAttribute(\"data-l10n-attrs\")\n .split(\",\")\n .map(i => i.trim())\n : null;\n // Remove existing localizable attributes if they\n // will not be used in the new translation.\n for (const attr of Array.from(toElement.attributes)) {\n if (isAttrNameLocalizable(attr.name, toElement, explicitlyAllowed) &&\n !hasAttribute(fromElement.attributes, attr.name)) {\n toElement.removeAttribute(attr.name);\n }\n }\n // fromElement might be a {value, attributes} object as returned by\n // Localization.messageFromBundle. In which case attributes may be null to\n // save GC cycles.\n if (!fromElement.attributes) {\n return;\n }\n // Set localizable attributes.\n for (const attr of Array.from(fromElement.attributes)) {\n if (isAttrNameLocalizable(attr.name, toElement, explicitlyAllowed) &&\n toElement.getAttribute(attr.name) !== attr.value) {\n toElement.setAttribute(attr.name, attr.value);\n }\n }\n}\n/**\n * Sanitize a child element created by the translation.\n *\n * Try to find a corresponding child in sourceElement and use it as the base\n * for the sanitization. This will preserve functional attribtues defined on\n * the child element in the source HTML.\n *\n * @param {Element} sourceElement - The source for data-l10n-name lookups.\n * @param {Element} translatedChild - The translated child to be sanitized.\n * @returns {Element}\n * @private\n */\nfunction getNodeForNamedElement(sourceElement, translatedChild) {\n const childName = translatedChild.getAttribute(\"data-l10n-name\");\n const sourceChild = sourceElement.querySelector(`[data-l10n-name=\"${childName}\"]`);\n if (!sourceChild) {\n console.warn(`An element named \"${childName}\" wasn't found in the source.`);\n return createTextNodeFromTextContent(translatedChild);\n }\n if (sourceChild.localName !== translatedChild.localName) {\n console.warn(`An element named \"${childName}\" was found in the translation ` +\n `but its type ${translatedChild.localName} didn't match the ` +\n `element found in the source (${sourceChild.localName}).`);\n return createTextNodeFromTextContent(translatedChild);\n }\n // Remove it from sourceElement so that the translation cannot use\n // the same reference name again.\n sourceElement.removeChild(sourceChild);\n // We can't currently guarantee that a translation won't remove\n // sourceChild from the element completely, which could break the app if\n // it relies on an event handler attached to the sourceChild. Let's make\n // this limitation explicit for now by breaking the identitiy of the\n // sourceChild by cloning it. This will destroy all event handlers\n // attached to sourceChild via addEventListener and via on<name>\n // properties.\n const clone = sourceChild.cloneNode(false);\n return shallowPopulateUsing(translatedChild, clone);\n}\n/**\n * Sanitize an allowed element.\n *\n * Text-level elements allowed in translations may only use safe attributes\n * and will have any nested markup stripped to text content.\n *\n * @param {Element} element - The element to be sanitized.\n * @returns {Element}\n * @private\n */\nfunction createSanitizedElement(element) {\n // Start with an empty element of the same type to remove nested children\n // and non-localizable attributes defined by the translation.\n const clone = element.ownerDocument.createElement(element.localName);\n return shallowPopulateUsing(element, clone);\n}\n/**\n * Convert an element to a text node.\n *\n * @param {Element} element - The element to be sanitized.\n * @returns {Node}\n * @private\n */\nfunction createTextNodeFromTextContent(element) {\n return element.ownerDocument.createTextNode(element.textContent);\n}\n/**\n * Check if element is allowed in the translation.\n *\n * This method is used by the sanitizer when the translation markup contains\n * an element which is not present in the source code.\n *\n * @param {Element} element\n * @returns {boolean}\n * @private\n */\nfunction isElementAllowed(element) {\n const allowed = TEXT_LEVEL_ELEMENTS[element.namespaceURI];\n return allowed && allowed.includes(element.localName);\n}\n/**\n * Check if attribute is allowed for the given element.\n *\n * This method is used by the sanitizer when the translation markup contains\n * DOM attributes, or when the translation has traits which map to DOM\n * attributes.\n *\n * `explicitlyAllowed` can be passed as a list of attributes explicitly\n * allowed on this element.\n *\n * @param {string} name\n * @param {Element} element\n * @param {Array} explicitlyAllowed\n * @returns {boolean}\n * @private\n */\nfunction isAttrNameLocalizable(name, element, explicitlyAllowed = null) {\n if (explicitlyAllowed && explicitlyAllowed.includes(name)) {\n return true;\n }\n const allowed = LOCALIZABLE_ATTRIBUTES[element.namespaceURI];\n if (!allowed) {\n return false;\n }\n const attrName = name.toLowerCase();\n const elemName = element.localName;\n // Is it a globally safe attribute?\n if (allowed.global.includes(attrName)) {\n return true;\n }\n // Are there no allowed attributes for this element?\n if (!allowed[elemName]) {\n return false;\n }\n // Is it allowed on this element?\n if (allowed[elemName].includes(attrName)) {\n return true;\n }\n // Special case for value on HTML inputs with type button, reset, submit\n if (element.namespaceURI === \"http://www.w3.org/1999/xhtml\" &&\n elemName === \"input\" &&\n attrName === \"value\") {\n const type = element.type.toLowerCase();\n if (type === \"submit\" || type === \"button\" || type === \"reset\") {\n return true;\n }\n }\n return false;\n}\n/**\n * Helper to set textContent and localizable attributes on an element.\n *\n * @param {Element} fromElement\n * @param {Element} toElement\n * @returns {Element}\n * @private\n */\nfunction shallowPopulateUsing(fromElement, toElement) {\n toElement.textContent = fromElement.textContent;\n overlayAttributes(fromElement, toElement);\n return toElement;\n}\n","/*\n * Base CachedIterable class.\n */\nexport default class CachedIterable extends Array {\n /**\n * Create a `CachedIterable` instance from an iterable or, if another\n * instance of `CachedIterable` is passed, return it without any\n * modifications.\n *\n * @param {Iterable} iterable\n * @returns {CachedIterable}\n */\n static from(iterable) {\n if (iterable instanceof this) {\n return iterable;\n }\n\n return new this(iterable);\n }\n}\n","import CachedIterable from \"./cached_iterable.mjs\";\n\n/*\n * CachedSyncIterable caches the elements yielded by an iterable.\n *\n * It can be used to iterate over an iterable many times without depleting the\n * iterable.\n */\nexport default class CachedSyncIterable extends CachedIterable {\n /**\n * Create an `CachedSyncIterable` instance.\n *\n * @param {Iterable} iterable\n * @returns {CachedSyncIterable}\n */\n constructor(iterable) {\n super();\n\n if (Symbol.iterator in Object(iterable)) {\n this.iterator = iterable[Symbol.iterator]();\n } else {\n throw new TypeError(\"Argument must implement the iteration protocol.\");\n }\n }\n\n [Symbol.iterator]() {\n const cached = this;\n let cur = 0;\n\n return {\n next() {\n if (cached.length <= cur) {\n cached.push(cached.iterator.next());\n }\n return cached[cur++];\n }\n };\n }\n\n /**\n * This method allows user to consume the next element from the iterator\n * into the cache.\n *\n * @param {number} count - number of elements to consume\n */\n touchNext(count = 1) {\n let idx = 0;\n while (idx++ < count) {\n const last = this[this.length - 1];\n if (last && last.done) {\n break;\n }\n this.push(this.iterator.next());\n }\n // Return the last cached {value, done} object to allow the calling\n // code to decide if it needs to call touchNext again.\n return this[this.length - 1];\n }\n}\n","import CachedIterable from \"./cached_iterable.mjs\";\n\n/*\n * CachedAsyncIterable caches the elements yielded by an async iterable.\n *\n * It can be used to iterate over an iterable many times without depleting the\n * iterable.\n */\nexport default class CachedAsyncIterable extends CachedIterable {\n /**\n * Create an `CachedAsyncIterable` instance.\n *\n * @param {Iterable} iterable\n * @returns {CachedAsyncIterable}\n */\n constructor(iterable) {\n super();\n\n if (Symbol.asyncIterator in Object(iterable)) {\n this.iterator = iterable[Symbol.asyncIterator]();\n } else if (Symbol.iterator in Object(iterable)) {\n this.iterator = iterable[Symbol.iterator]();\n } else {\n throw new TypeError(\"Argument must implement the iteration protocol.\");\n }\n }\n\n /**\n * Asynchronous iterator caching the yielded elements.\n *\n * Elements yielded by the original iterable will be cached and available\n * synchronously. Returns an async generator object implementing the\n * iterator protocol over the elements of the original (async or sync)\n * iterable.\n */\n [Symbol.asyncIterator]() {\n const cached = this;\n let cur = 0;\n\n return {\n async next() {\n if (cached.length <= cur) {\n cached.push(cached.iterator.next());\n }\n return cached[cur++];\n }\n };\n }\n\n /**\n * This method allows user to consume the next element from the iterator\n * into the cache.\n *\n * @param {number} count - number of elements to consume\n */\n async touchNext(count = 1) {\n let idx = 0;\n while (idx++ < count) {\n const last = this[this.length - 1];\n if (last && (await last).done) {\n break;\n }\n this.push(this.iterator.next());\n }\n // Return the last cached {value, done} object to allow the calling\n // code to decide if it needs to call touchNext again.\n return this[this.length - 1];\n }\n}\n","export {default as CachedSyncIterable} from \"./cached_sync_iterable.mjs\";\nexport {default as CachedAsyncIterable} from \"./cached_async_iterable.mjs\";\n","/* eslint no-console: [\"error\", { allow: [\"warn\", \"error\"] }] */\n/* global console */\nimport { CachedAsyncIterable } from \"cached-iterable\";\n/**\n * The `Localization` class is a central high-level API for vanilla\n * JavaScript use of Fluent.\n * It combines language negotiation, FluentBundle and I/O to\n * provide a scriptable API to format translations.\n */\nexport default class Localization {\n /**\n * @param {Array<String>} resourceIds - List of resource IDs\n * @param {Function} generateBundles - Function that returns a\n * generator over FluentBundles\n *\n * @returns {Localization}\n */\n constructor(resourceIds = [], generateBundles) {\n this.resourceIds = resourceIds;\n this.generateBundles = generateBundles;\n this.onChange(true);\n }\n addResourceIds(resourceIds, eager = false) {\n this.resourceIds.push(...resourceIds);\n this.onChange(eager);\n return this.resourceIds.length;\n }\n removeResourceIds(resourceIds) {\n this.resourceIds = this.resourceIds.filter(r => !resourceIds.includes(r));\n this.onChange();\n return this.resourceIds.length;\n }\n /**\n * Format translations and handle fallback if needed.\n *\n * Format translations for `keys` from `FluentBundle` instances on this\n * DOMLocalization. In case of errors, fetch the next context in the\n * fallback chain.\n *\n * @param {Array<Object>} keys - Translation keys to format.\n * @param {Function} method - Formatting function.\n * @returns {Promise<Array<string|Object>>}\n * @private\n */\n async formatWithFallback(keys, method) {\n const translations = [];\n let hasAtLeastOneBundle = false;\n for await (const bundle of this.bundles) {\n hasAtLeastOneBundle = true;\n const missingIds = keysFromBundle(method, bundle, keys, translations);\n if (missingIds.size === 0) {\n break;\n }\n if (typeof console !== \"undefined\") {\n const locale = bundle.locales[0];\n const ids = Array.from(missingIds).join(\", \");\n console.warn(`[fluent] Missing translations in ${locale}: ${ids}`);\n }\n }\n if (!hasAtLeastOneBundle && typeof console !== \"undefined\") {\n // eslint-disable-next-line max-len\n console.warn(`[fluent] Request for keys failed because no resource bundles got generated.\n keys: ${JSON.stringify(keys)}.\n resourceIds: ${JSON.stringify(this.resourceIds)}.`);\n }\n return translations;\n }\n /**\n * Format translations into `{value, attributes}` objects.\n *\n * The fallback logic is the same as in `formatValues`\n * but it returns `{value, attributes}` objects\n * which are suitable for the translation of DOM elements.\n *\n * Returns a Promise resolving to an array of the translation strings.\n *\n * @example\n * ```js\n * docL10n.formatMessages([\n * {id: 'hello', args: { who: 'Mary' }},\n * {id: 'welcome'}\n * ]).then(console.log);\n *\n * // [\n * // { value: 'Hello, Mary!', attributes: null },\n * // {\n * // value: 'Welcome!',\n * // attributes: [ { name: \"title\", value: 'Hello' } ]\n * // }\n * // ]\n * ```\n *\n * @param {Array<Object>} keys\n * @returns {Promise<Array<{value: string, attributes: Object}>>}\n * @private\n */\n formatMessages(keys) {\n return this.formatWithFallback(keys, messageFromBundle);\n }\n /**\n * Retrieve translations corresponding to the passed keys.\n *\n * A generalized version of `DOMLocalization.formatValue`. Keys must\n * be `{id, args}` objects.\n *\n * Returns a Promise resolving to an array of the translation strings.\n *\n * @example\n * ```js\n * docL10n.formatValues([\n * {id: 'hello', args: { who: 'Mary' }},\n * {id: 'hello', args: { who: 'John' }},\n * {id: 'welcome'}\n * ]).then(console.log);\n *\n * // ['Hello, Mary!', 'Hello, John!', 'Welcome!']\n * ```\n *\n * @param {Array<Object>} keys\n * @returns {Promise<Array<string>>}\n */\n formatValues(keys) {\n return this.formatWithFallback(keys, valueFromBundle);\n }\n /**\n * Retrieve the translation corresponding to the `id` identifier.\n *\n * If passed, `args` is a simple hash object with a list of variables that\n * will be interpolated in the value of the translation.\n *\n * Returns a Promise resolving to the translation string.\n *\n * Use this sparingly for one-off messages which don't need to be\n * retranslated when the user changes their language preferences, e.g. in\n * notifications.\n *\n * @example\n * ```js\n * docL10n.formatValue(\n * 'hello', { who: 'world' }\n * ).then(console.log);\n *\n * // 'Hello, world!'\n * ```\n *\n * @param {string} id - Identifier of the translation to format\n * @param {Object} [args] - Optional external arguments\n * @returns {Promise<string>}\n */\n async formatValue(id, args) {\n const [val] = await this.formatValues([{ id, args }]);\n return val;\n }\n handleEvent() {\n this.onChange();\n }\n /**\n * This method should be called when there's a reason to believe\n * that language negotiation or available resources changed.\n */\n onChange(eager = false) {\n this.bundles = CachedAsyncIterable.from(this.generateBundles(this.resourceIds));\n if (eager) {\n this.bundles.touchNext(2);\n }\n }\n}\n/**\n * Format the value of a message into a string or `null`.\n *\n * This function is passed as a method to `keysFromBundle` and resolve\n * a value of a single L10n Entity using provided `FluentBundle`.\n *\n * If the message doesn't have a value, return `null`.\n *\n * @param {FluentBundle} bundle\n * @param {Array<Error>} errors\n * @param {Object} message\n * @param {Object} args\n * @returns {string|null}\n * @private\n */\nfunction valueFromBundle(bundle, errors, message, args) {\n if (message.value) {\n return bundle.formatPattern(message.value, args, errors);\n }\n return null;\n}\n/**\n * Format all public values of a message into a {value, attributes} object.\n *\n * This function is passed as a method to `keysFromBundle` and resolve\n * a single L10n Entity using provided `FluentBundle`.\n *\n * The function will return an object with a value and attributes of the\n * entity.\n *\n * @param {FluentBundle} bundle\n * @param {Array<Error>} errors\n * @param {Object} message\n * @param {Object} args\n * @returns {Object}\n * @private\n */\nfunction messageFromBundle(bundle, errors, message, args) {\n const formatted = {\n value: null,\n attributes: null,\n };\n if (message.value) {\n formatted.value = bundle.formatPattern(message.value, args, errors);\n }\n let attrNames = Object.keys(message.attributes);\n if (attrNames.length > 0) {\n formatted.attributes = new Array(attrNames.length);\n for (let [i, name] of attrNames.entries()) {\n let value = bundle.formatPattern(message.attributes[name], args, errors);\n formatted.attributes[i] = { name, value };\n }\n }\n return formatted;\n}\n/**\n * This function is an inner function for `Localization.formatWithFallback`.\n *\n * It takes a `FluentBundle`, list of l10n-ids and a method to be used for\n * key resolution (either `valueFromBundle` or `messageFromBundle`) and\n * optionally a value returned from `keysFromBundle` executed against\n * another `FluentBundle`.\n *\n * The idea here is that if the previous `FluentBundle` did not resolve\n * all keys, we're calling this function with the next context to resolve\n * the remaining ones.\n *\n * In the function, we loop over `keys` and check if we have the `prev`\n * passed and if it has an error entry for the position we're in.\n *\n * If it doesn't, it means that we have a good translation for this key and\n * we return it. If it does, we'll try to resolve the key using the passed\n * `FluentBundle`.\n *\n * In the end, we fill the translations array, and return the Set with\n * missing ids.\n *\n * See `Localization.formatWithFallback` for more info on how this is used.\n *\n * @param {Function} method\n * @param {FluentBundle} bundle\n * @param {Array<string>} keys\n * @param {{Array<{value: string, attributes: Object}>}} translations\n *\n * @returns {Set<string>}\n * @private\n */\nfunction keysFromBundle(method, bundle, keys, translations) {\n const messageErrors = [];\n const missingIds = new Set();\n keys.forEach(({ id, args }, i) => {\n if (translations[i] !== undefined) {\n return;\n }\n let message = bundle.getMessage(id);\n if (message) {\n messageErrors.length = 0;\n translations[i] = method(bundle, messageErrors, message, args);\n if (messageErrors.length > 0 && typeof console !== \"undefined\") {\n const locale = bundle.locales[0];\n const errors = messageErrors.join(\", \");\n // eslint-disable-next-line max-len\n console.warn(`[fluent][resolver] errors in ${locale}/${id}: ${errors}.`);\n }\n }\n else {\n missingIds.add(id);\n }\n });\n return missingIds;\n}\n","import translateElement from \"./overlay.js\";\nimport Localization from \"./localization.js\";\nconst L10NID_ATTR_NAME = \"data-l10n-id\";\nconst L10NARGS_ATTR_NAME = \"data-l10n-args\";\nconst L10N_ELEMENT_QUERY = `[${L10NID_ATTR_NAME}]`;\n/**\n * The `DOMLocalization` class is responsible for fetching resources and\n * formatting translations.\n *\n * It implements the fallback strategy in case of errors encountered during the\n * formatting of translations and methods for observing DOM\n * trees with a `MutationObserver`.\n */\nexport default class DOMLocalization extends Localization {\n /**\n * @param {Array<String>} resourceIds - List of resource IDs\n * @param {Function} generateBundles - Function that returns a\n * generator over FluentBundles\n * @returns {DOMLocalization}\n */\n constructor(resourceIds, generateBundles) {\n super(resourceIds, generateBundles);\n // A Set of DOM trees observed by the `MutationObserver`.\n this.roots = new Set();\n // requestAnimationFrame handler.\n this.pendingrAF = null;\n // list of elements pending for translation.\n this.pendingElements = new Set();\n this.windowElement = null;\n this.mutationObserver = null;\n this.observerConfig = {\n attributes: true,\n characterData: false,\n childList: true,\n subtree: true,\n attributeFilter: [L10NID_ATTR_NAME, L10NARGS_ATTR_NAME],\n };\n }\n onChange(eager = false) {\n super.onChange(eager);\n if (this.roots) {\n this.translateRoots();\n }\n }\n /**\n * Set the `data-l10n-id` and `data-l10n-args` attributes on DOM elements.\n * FluentDOM makes use of mutation observers to detect changes\n * to `data-l10n-*` attributes and translate elements asynchronously.\n * `setAttributes` is a convenience method which allows to translate\n * DOM elements declaratively.\n *\n * You should always prefer to use `data-l10n-id` on elements (statically in\n * HTML or dynamically via `setAttributes`) over manually retrieving\n * translations with `format`. The use of attributes ensures that the\n * elements can be retranslated when the user changes their language\n * preferences.\n *\n * ```javascript\n * localization.setAttributes(\n * document.querySelector('#welcome'), 'hello', { who: 'world' }\n * );\n * ```\n *\n * This will set the following attributes on the `#welcome` element.\n * The MutationObserver will pick up this change and will localize the element\n * asynchronously.\n *\n * ```html\n * <p id='welcome'\n * data-l10n-id='hello'\n * data-l10n-args='{\"who\": \"world\"}'>\n * </p>\n * ```\n *\n * @param {Element} element - Element to set attributes on\n * @param {string} id - l10n-id string\n * @param {Object<string, string>} args - KVP list of l10n arguments\n * @returns {Element}\n */\n setAttributes(element, id, args) {\n element.setAttribute(L10NID_ATTR_NAME, id);\n if (args) {\n element.setAttribute(L10NARGS_ATTR_NAME, JSON.stringify(args));\n }\n else {\n element.removeAttribute(L10NARGS_ATTR_NAME);\n }\n return element;\n }\n /**\n * Get the `data-l10n-*` attributes from DOM elements.\n *\n * ```javascript\n * localization.getAttributes(\n * document.querySelector('#welcome')\n * );\n * // -> { id: 'hello', args: { who: 'world' } }\n * ```\n *\n * @param {Element} element - HTML element\n * @returns {{id: string, args: Object}}\n */\n getAttributes(element) {\n return {\n id: element.getAttribute(L10NID_ATTR_NAME),\n args: JSON.parse(element.getAttribute(L10NARGS_ATTR_NAME) || null),\n };\n }\n /**\n * Add `newRoot` to the list of roots managed by this `DOMLocalization`.\n *\n * Additionally, if this `DOMLocalization` has an observer, start observing\n * `newRoot` in order to translate mutations in it.\n *\n * @param {Element} newRoot - Root to observe.\n */\n connectRoot(newRoot) {\n for (const root of this.roots) {\n if (root === newRoot ||\n root.contains(newRoot) ||\n newRoot.contains(root)) {\n throw new Error(\"Cannot add a root that overlaps with existing root.\");\n }\n }\n if (this.windowElement) {\n if (this.windowElement !== newRoot.ownerDocument.defaultView) {\n throw new Error(`Cannot connect a root:\n DOMLocalization already has a root from a different window.`);\n }\n }\n else {\n this.windowElement = newRoot.ownerDocument.defaultView;\n this.mutationObserver = new this.windowElement.MutationObserver(mutations => this.translateMutations(mutations));\n }\n this.roots.add(newRoot);\n this.mutationObserver.observe(newRoot, this.observerConfig);\n }\n /**\n * Remove `root` from the list of roots managed by this `DOMLocalization`.\n *\n * Additionally, if this `DOMLocalization` has an observer, stop observing\n * `root`.\n *\n * Returns `true` if the root was the last one managed by this\n * `DOMLocalization`.\n *\n * @param {Element} root - Root to disconnect.\n * @returns {boolean}\n */\n disconnectRoot(root) {\n this.roots.delete(root);\n // Pause the mutation observer to stop observing `root`.\n this.pauseObserving();\n if (this.roots.size === 0) {\n this.mutationObserver = null;\n this.windowElement = null;\n this.pendingrAF = null;\n this.pendingElements.clear();\n return true;\n }\n // Resume observing all other roots.\n this.resumeObserving();\n return false;\n }\n /**\n * Translate all roots associated with this `DOMLocalization`.\n *\n * @returns {Promise}\n */\n translateRoots() {\n const roots = Array.from(this.roots);\n return Promise.all(roots.map(root => this.translateFragment(root)));\n }\n /**\n * Pauses the `MutationObserver`.\n *\n * @private\n */\n pauseObserving() {\n if (!this.mutationObserver) {\n return;\n }\n this.translateMutations(this.mutationObserver.takeRecords());\n this.mutationObserver.disconnect();\n }\n /**\n * Resumes the `MutationObserver`.\n *\n * @private\n */\n resumeObserving() {\n if (!this.mutationObserver) {\n return;\n }\n for (const root of this.roots) {\n this.mutationObserver.observe(root, this.observerConfig);\n }\n }\n /**\n * Translate mutations detected by the `MutationObserver`.\n *\n * @private\n */\n translateMutations(mutations) {\n for (const mutation of mutations) {\n switch (mutation.type) {\n case \"attributes\":\n if (mutation.target.hasAttribute(\"data-l10n-id\")) {\n this.pendingElements.add(mutation.target);\n }\n break;\n case \"childList\":\n for (const addedNode of mutation.addedNodes) {\n if (addedNode.nodeType === addedNode.ELEMENT_NODE) {\n if (addedNode.childElementCount) {\n for (const element of this.getTranslatables(addedNode)) {\n this.pendingElements.add(element);\n }\n }\n else if (addedNode.hasAttribute(L10NID_ATTR_NAME)) {\n this.pendingElements.add(addedNode);\n }\n }\n }\n break;\n }\n }\n // This fragment allows us to coalesce all pending translations\n // into a single requestAnimationFrame.\n if (this.pendingElements.size > 0) {\n if (this.pendingrAF === null) {\n this.pendingrAF = this.windowElement.requestAnimationFrame(() => {\n this.translateElements(Array.from(this.pendingElements));\n this.pendingElements.clear();\n this.pendingrAF = null;\n });\n }\n }\n }\n /**\n * Translate a DOM element or fragment asynchronously using this\n * `DOMLocalization` object.\n *\n * Manually trigger the translation (or re-translation) of a DOM fragment.\n * Use the `data-l10n-id` and `data-l10n-args` attributes to mark up the DOM\n * with information about which translations to use.\n *\n * Returns a `Promise` that gets resolved once the translation is complete.\n *\n * @param {DOMFragment} frag - Element or DocumentFragment to be translated\n * @returns {Promise}\n */\n translateFragment(frag) {\n return this.translateElements(this.getTranslatables(frag));\n }\n /**\n * Translate a list of DOM elements asynchronously using this\n * `DOMLocalization` object.\n *\n * Manually trigger the translation (or re-translation) of a list of elements.\n * Use the `data-l10n-id` and `data-l10n-args` attributes to mark up the DOM\n * with information about which translations to use.\n *\n * Returns a `Promise` that gets resolved once the translation is complete.\n *\n * @param {Array<Element>} elements - List of elements to be translated\n * @returns {Promise}\n */\n async translateElements(elements) {\n if (!elements.length) {\n return undefined;\n }\n const keys = elements.map(this.getKeysForElement);\n const translations = await this.formatMessages(keys);\n return this.applyTranslations(elements, translations);\n }\n /**\n * Applies translations onto elements.\n *\n * @param {Array<Element>} elements\n * @param {Array<Object>} translations\n * @private\n */\n applyTranslations(elements, translations) {\n this.pauseObserving();\n for (let i = 0; i < elements.length; i++) {\n if (translations[i] !== undefined) {\n translateElement(elements[i], translations[i]);\n }\n }\n this.resumeObserving();\n }\n /**\n * Collects all translatable child elements of the element.\n *\n * @param {Element} element\n * @returns {Array<Element>}\n * @private\n */\n getTranslatables(element) {\n const nodes = Array.from(element.querySelectorAll(L10N_ELEMENT_QUERY));\n if (typeof element.hasAttribute === \"function\" &&\n element.hasAttribute(L10NID_ATTR_NAME)) {\n nodes.push(element);\n }\n return nodes;\n }\n /**\n * Get the `data-l10n-*` attributes from DOM elements as a two-element\n * array.\n *\n * @param {Element} element\n * @returns {Object}\n * @private\n */\n getKeysForElement(element) {\n return {\n id: element.getAttribute(L10NID_ATTR_NAME),\n args: JSON.parse(element.getAttribute(L10NARGS_ATTR_NAME) || null),\n };\n }\n}\n","export { default as DOMLocalization } from \"./dom_localization.js\";\nexport { default as Localization } from \"./localization.js\";\n","/* Copyright 2023 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\n/** @typedef {import(\"./interfaces\").IL10n} IL10n */\n\n/**\n * NOTE: The L10n-implementations should use lowercase language-codes\n * internally.\n * @implements {IL10n}\n */\nclass L10n {\n #dir;\n\n #lang;\n\n #l10n;\n\n constructor({ lang, isRTL }, l10n = null) {\n this.#lang = L10n.#fixupLangCode(lang);\n this.#l10n = l10n;\n this.#dir = isRTL ?? L10n.#isRTL(this.#lang) ? \"rtl\" : \"ltr\";\n }\n\n _setL10n(l10n) {\n this.#l10n = l10n;\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"TESTING\")) {\n document.l10n = l10n;\n }\n }\n\n /** @inheritdoc */\n getLanguage() {\n return this.#lang;\n }\n\n /** @inheritdoc */\n getDirection() {\n return this.#dir;\n }\n\n /** @inheritdoc */\n async get(ids, args = null, fallback) {\n if (Array.isArray(ids)) {\n ids = ids.map(id => ({ id }));\n const messages = await this.#l10n.formatMessages(ids);\n return messages.map(message => message.value);\n }\n\n const messages = await this.#l10n.formatMessages([\n {\n id: ids,\n args,\n },\n ]);\n return messages?.[0].value || fallback;\n }\n\n /** @inheritdoc */\n async translate(element) {\n try {\n this.#l10n.connectRoot(element);\n await this.#l10n.translateRoots();\n } catch {\n // Element is under an existing root, so there is no need to add it again.\n }\n }\n\n /** @inheritdoc */\n pause() {\n this.#l10n.pauseObserving();\n }\n\n /** @inheritdoc */\n resume() {\n this.#l10n.resumeObserving();\n }\n\n static #fixupLangCode(langCode) {\n // Use only lowercase language-codes internally, and fallback to English.\n langCode = langCode?.toLowerCase() || \"en-us\";\n\n // Try to support \"incompletely\" specified language codes (see issue 13689).\n const PARTIAL_LANG_CODES = {\n en: \"en-us\",\n es: \"es-es\",\n fy: \"fy-nl\",\n ga: \"ga-ie\",\n gu: \"gu-in\",\n hi: \"hi-in\",\n hy: \"hy-am\",\n nb: \"nb-no\",\n ne: \"ne-np\",\n nn: \"nn-no\",\n pa: \"pa-in\",\n pt: \"pt-pt\",\n sv: \"sv-se\",\n zh: \"zh-cn\",\n };\n return PARTIAL_LANG_CODES[langCode] || langCode;\n }\n\n static #isRTL(lang) {\n const shortCode = lang.split(\"-\", 1)[0];\n return [\"ar\", \"he\", \"fa\", \"ps\", \"ur\"].includes(shortCode);\n }\n}\n\nconst GenericL10n = null;\n\nexport { GenericL10n, L10n };\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\n/** @typedef {import(\"./interfaces\").IL10n} IL10n */\n\nimport { FluentBundle, FluentResource } from \"fluent-bundle\";\nimport { DOMLocalization } from \"fluent-dom\";\nimport { fetchData } from \"pdfjs-lib\";\nimport { L10n } from \"./l10n.js\";\n\nfunction createBundle(lang, text) {\n const resource = new FluentResource(text);\n const bundle = new FluentBundle(lang);\n const errors = bundle.addResource(resource);\n if (errors.length) {\n console.error(\"L10n errors\", errors);\n }\n return bundle;\n}\n\n/**\n * @implements {IL10n}\n */\nclass GenericL10n extends L10n {\n constructor(lang) {\n super({ lang });\n\n const generateBundles = !lang\n ? GenericL10n.#generateBundlesFallback.bind(\n GenericL10n,\n this.getLanguage()\n )\n : GenericL10n.#generateBundles.bind(\n GenericL10n,\n \"en-us\",\n this.getLanguage()\n );\n this._setL10n(new DOMLocalization([], generateBundles));\n }\n\n /**\n * Generate the bundles for Fluent.\n * @param {String} defaultLang - The fallback language to use for\n * translations.\n * @param {String} baseLang - The base language to use for translations.\n */\n static async *#generateBundles(defaultLang, baseLang) {\n const { baseURL, paths } = await this.#getPaths();\n\n const langs = [baseLang];\n if (defaultLang !== baseLang) {\n // Also fallback to the short-format of the base language\n // (see issue 17269).\n const shortLang = baseLang.split(\"-\", 1)[0];\n\n if (shortLang !== baseLang) {\n langs.push(shortLang);\n }\n langs.push(defaultLang);\n }\n for (const lang of langs) {\n const bundle = await this.#createBundle(lang, baseURL, paths);\n if (bundle) {\n yield bundle;\n }\n if (lang === \"en-us\") {\n yield this.#createBundleFallback(lang);\n }\n }\n }\n\n static async #createBundle(lang, baseURL, paths) {\n const path = paths[lang];\n if (!path) {\n return null;\n }\n const url = new URL(path, baseURL);\n const text = await fetchData(url, /* type = */ \"text\");\n\n return createBundle(lang, text);\n }\n\n static async #getPaths() {\n try {\n const { href } = document.querySelector(`link[type=\"application/l10n\"]`);\n const paths = await fetchData(href, /* type = */ \"json\");\n\n return { baseURL: href.replace(/[^/]*$/, \"\") || \"./\", paths };\n } catch {}\n return { baseURL: \"./\", paths: Object.create(null) };\n }\n\n static async *#generateBundlesFallback(lang) {\n yield this.#createBundleFallback(lang);\n }\n\n static async #createBundleFallback(lang) {\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"TESTING\")) {\n throw new Error(\"Not implemented: #createBundleFallback\");\n }\n const text =\n typeof PDFJSDev === \"undefined\"\n ? await fetchData(\n new URL(\"../l10n/en-US/viewer.ftl\", window.location.href),\n /* type = */ \"text\"\n )\n : PDFJSDev.eval(\"DEFAULT_FTL\");\n\n return createBundle(lang, text);\n }\n}\n\nexport { GenericL10n };\n","/* Copyright 2020 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 { getPdfFilenameFromUrl } from \"pdfjs-lib\";\n\nasync function docProperties(pdfDocument) {\n const url = \"\",\n baseUrl = url.split(\"#\", 1)[0];\n // eslint-disable-next-line prefer-const\n let { info, metadata, contentDispositionFilename, contentLength } =\n await pdfDocument.getMetadata();\n\n if (!contentLength) {\n const { length } = await pdfDocument.getDownloadInfo();\n contentLength = length;\n }\n\n return {\n ...info,\n baseURL: baseUrl,\n filesize: contentLength,\n filename: contentDispositionFilename || getPdfFilenameFromUrl(url),\n metadata: metadata?.getRaw(),\n authors: metadata?.get(\"dc:creator\"),\n numPages: pdfDocument.numPages,\n URL: url,\n };\n}\n\nclass GenericScripting {\n constructor(sandboxBundleSrc) {\n this._ready = new Promise((resolve, reject) => {\n const sandbox =\n typeof PDFJSDev === \"undefined\"\n ? import(sandboxBundleSrc) // eslint-disable-line no-unsanitized/method\n : __non_webpack_import__(sandboxBundleSrc);\n sandbox\n .then(pdfjsSandbox => {\n resolve(pdfjsSandbox.QuickJSSandbox());\n })\n .catch(reject);\n });\n }\n\n async createSandbox(data) {\n const sandbox = await this._ready;\n sandbox.create(data);\n }\n\n async dispatchEventInSandbox(event) {\n const sandbox = await this._ready;\n setTimeout(() => sandbox.dispatchEvent(event), 0);\n }\n\n async destroySandbox() {\n const sandbox = await this._ready;\n sandbox.nukeSandbox();\n }\n}\n\nexport { docProperties, GenericScripting };\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 { AppOptions } from \"./app_options.js\";\nimport { BaseExternalServices } from \"./external_services.js\";\nimport { BasePreferences } from \"./preferences.js\";\nimport { GenericL10n } from \"./genericl10n.js\";\nimport { GenericScripting } from \"./generic_scripting.js\";\n\nif (typeof PDFJSDev !== \"undefined\" && !PDFJSDev.test(\"GENERIC\")) {\n throw new Error(\n 'Module \"pdfjs-web/genericcom\" shall not be used outside GENERIC build.'\n );\n}\n\nfunction initCom(app) {}\n\nclass Preferences extends BasePreferences {\n async _writeToStorage(prefObj) {\n localStorage.setItem(\"pdfjs.preferences\", JSON.stringify(prefObj));\n }\n\n async _readFromStorage(prefObj) {\n return { prefs: JSON.parse(localStorage.getItem(\"pdfjs.preferences\")) };\n }\n}\n\nclass ExternalServices extends BaseExternalServices {\n async createL10n() {\n return new GenericL10n(AppOptions.get(\"locale\"));\n }\n\n createScripting() {\n return new GenericScripting(AppOptions.get(\"sandboxBundleSrc\"));\n }\n}\n\nclass MLManager {\n async guess() {\n return null;\n }\n}\n\nexport { ExternalServices, initCom, MLManager, Preferences };\n","/* Copyright 2023 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 { DOMSVGFactory, shadow } from \"pdfjs-lib\";\n\nclass AltTextManager {\n #boundUpdateUIState = this.#updateUIState.bind(this);\n\n #boundSetPosition = this.#setPosition.bind(this);\n\n #boundOnClick = this.#onClick.bind(this);\n\n #currentEditor = null;\n\n #cancelButton;\n\n #dialog;\n\n #eventBus;\n\n #hasUsedPointer = false;\n\n #optionDescription;\n\n #optionDecorative;\n\n #overlayManager;\n\n #saveButton;\n\n #textarea;\n\n #uiManager;\n\n #previousAltText = null;\n\n #svgElement = null;\n\n #rectElement = null;\n\n #container;\n\n #telemetryData = null;\n\n constructor(\n {\n dialog,\n optionDescription,\n optionDecorative,\n textarea,\n cancelButton,\n saveButton,\n },\n container,\n overlayManager,\n eventBus\n ) {\n this.#dialog = dialog;\n this.#optionDescription = optionDescription;\n this.#optionDecorative = optionDecorative;\n this.#textarea = textarea;\n this.#cancelButton = cancelButton;\n this.#saveButton = saveButton;\n this.#overlayManager = overlayManager;\n this.#eventBus = eventBus;\n this.#container = container;\n\n dialog.addEventListener(\"close\", this.#close.bind(this));\n dialog.addEventListener(\"contextmenu\", event => {\n if (event.target !== this.#textarea) {\n event.preventDefault();\n }\n });\n cancelButton.addEventListener(\"click\", this.#finish.bind(this));\n saveButton.addEventListener(\"click\", this.#save.bind(this));\n optionDescription.addEventListener(\"change\", this.#boundUpdateUIState);\n optionDecorative.addEventListener(\"change\", this.#boundUpdateUIState);\n\n this.#overlayManager.register(dialog);\n }\n\n get _elements() {\n return shadow(this, \"_elements\", [\n this.#optionDescription,\n this.#optionDecorative,\n this.#textarea,\n this.#saveButton,\n this.#cancelButton,\n ]);\n }\n\n #createSVGElement() {\n if (this.#svgElement) {\n return;\n }\n\n // We create a mask to add to the dialog backdrop: the idea is to have a\n // darken background everywhere except on the editor to clearly see the\n // picture to describe.\n\n const svgFactory = new DOMSVGFactory();\n const svg = (this.#svgElement = svgFactory.createElement(\"svg\"));\n svg.setAttribute(\"width\", \"0\");\n svg.setAttribute(\"height\", \"0\");\n const defs = svgFactory.createElement(\"defs\");\n svg.append(defs);\n const mask = svgFactory.createElement(\"mask\");\n defs.append(mask);\n mask.setAttribute(\"id\", \"alttext-manager-mask\");\n mask.setAttribute(\"maskContentUnits\", \"objectBoundingBox\");\n let rect = svgFactory.createElement(\"rect\");\n mask.append(rect);\n rect.setAttribute(\"fill\", \"white\");\n rect.setAttribute(\"width\", \"1\");\n rect.setAttribute(\"height\", \"1\");\n rect.setAttribute(\"x\", \"0\");\n rect.setAttribute(\"y\", \"0\");\n\n rect = this.#rectElement = svgFactory.createElement(\"rect\");\n mask.append(rect);\n rect.setAttribute(\"fill\", \"black\");\n this.#dialog.append(svg);\n }\n\n async editAltText(uiManager, editor) {\n if (this.#currentEditor || !editor) {\n return;\n }\n\n this.#createSVGElement();\n\n this.#hasUsedPointer = false;\n for (const element of this._elements) {\n element.addEventListener(\"click\", this.#boundOnClick);\n }\n\n const { altText, decorative } = editor.altTextData;\n if (decorative === true) {\n this.#optionDecorative.checked = true;\n this.#optionDescription.checked = false;\n } else {\n this.#optionDecorative.checked = false;\n this.#optionDescription.checked = true;\n }\n this.#previousAltText = this.#textarea.value = altText?.trim() || \"\";\n this.#updateUIState();\n\n this.#currentEditor = editor;\n this.#uiManager = uiManager;\n this.#uiManager.removeEditListeners();\n this.#eventBus._on(\"resize\", this.#boundSetPosition);\n\n try {\n await this.#overlayManager.open(this.#dialog);\n this.#setPosition();\n } catch (ex) {\n this.#close();\n throw ex;\n }\n }\n\n #setPosition() {\n if (!this.#currentEditor) {\n return;\n }\n const dialog = this.#dialog;\n const { style } = dialog;\n const {\n x: containerX,\n y: containerY,\n width: containerW,\n height: containerH,\n } = this.#container.getBoundingClientRect();\n const { innerWidth: windowW, innerHeight: windowH } = window;\n const { width: dialogW, height: dialogH } = dialog.getBoundingClientRect();\n const { x, y, width, height } = this.#currentEditor.getClientDimensions();\n const MARGIN = 10;\n const isLTR = this.#uiManager.direction === \"ltr\";\n\n const xs = Math.max(x, containerX);\n const xe = Math.min(x + width, containerX + containerW);\n const ys = Math.max(y, containerY);\n const ye = Math.min(y + height, containerY + containerH);\n this.#rectElement.setAttribute(\"width\", `${(xe - xs) / windowW}`);\n this.#rectElement.setAttribute(\"height\", `${(ye - ys) / windowH}`);\n this.#rectElement.setAttribute(\"x\", `${xs / windowW}`);\n this.#rectElement.setAttribute(\"y\", `${ys / windowH}`);\n\n let left = null;\n let top = Math.max(y, 0);\n top += Math.min(windowH - (top + dialogH), 0);\n\n if (isLTR) {\n // Prefer to position the dialog \"after\" (so on the right) the editor.\n if (x + width + MARGIN + dialogW < windowW) {\n left = x + width + MARGIN;\n } else if (x > dialogW + MARGIN) {\n left = x - dialogW - MARGIN;\n }\n } else if (x > dialogW + MARGIN) {\n left = x - dialogW - MARGIN;\n } else if (x + width + MARGIN + dialogW < windowW) {\n left = x + width + MARGIN;\n }\n\n if (left === null) {\n top = null;\n left = Math.max(x, 0);\n left += Math.min(windowW - (left + dialogW), 0);\n if (y > dialogH + MARGIN) {\n top = y - dialogH - MARGIN;\n } else if (y + height + MARGIN + dialogH < windowH) {\n top = y + height + MARGIN;\n }\n }\n\n if (top !== null) {\n dialog.classList.add(\"positioned\");\n if (isLTR) {\n style.left = `${left}px`;\n } else {\n style.right = `${windowW - left - dialogW}px`;\n }\n style.top = `${top}px`;\n } else {\n dialog.classList.remove(\"positioned\");\n style.left = \"\";\n style.top = \"\";\n }\n }\n\n #finish() {\n if (this.#overlayManager.active === this.#dialog) {\n this.#overlayManager.close(this.#dialog);\n }\n }\n\n #close() {\n this.#currentEditor._reportTelemetry(\n this.#telemetryData || {\n action: \"alt_text_cancel\",\n alt_text_keyboard: !this.#hasUsedPointer,\n }\n );\n this.#telemetryData = null;\n\n this.#removeOnClickListeners();\n this.#uiManager?.addEditListeners();\n this.#eventBus._off(\"resize\", this.#boundSetPosition);\n this.#currentEditor.altTextFinish();\n this.#currentEditor = null;\n this.#uiManager = null;\n }\n\n #updateUIState() {\n this.#textarea.disabled = this.#optionDecorative.checked;\n }\n\n #save() {\n const altText = this.#textarea.value.trim();\n const decorative = this.#optionDecorative.checked;\n this.#currentEditor.altTextData = {\n altText,\n decorative,\n };\n this.#telemetryData = {\n action: \"alt_text_save\",\n alt_text_description: !!altText,\n alt_text_edit:\n !!this.#previousAltText && this.#previousAltText !== altText,\n alt_text_decorative: decorative,\n alt_text_keyboard: !this.#hasUsedPointer,\n };\n this.#finish();\n }\n\n #onClick(evt) {\n if (evt.detail === 0) {\n return; // The keyboard was used.\n }\n this.#hasUsedPointer = true;\n this.#removeOnClickListeners();\n }\n\n #removeOnClickListeners() {\n for (const element of this._elements) {\n element.removeEventListener(\"click\", this.#boundOnClick);\n }\n }\n\n destroy() {\n this.#uiManager = null; // Avoid re-adding the edit listeners.\n this.#finish();\n this.#svgElement?.remove();\n this.#svgElement = this.#rectElement = null;\n }\n}\n\nexport { AltTextManager };\n","/* Copyright 2022 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\n/** @typedef {import(\"./event_utils.js\").EventBus} EventBus */\n\nimport { AnnotationEditorParamsType } from \"pdfjs-lib\";\n\n/**\n * @typedef {Object} AnnotationEditorParamsOptions\n * @property {HTMLInputElement} editorFreeTextFontSize\n * @property {HTMLInputElement} editorFreeTextColor\n * @property {HTMLInputElement} editorInkColor\n * @property {HTMLInputElement} editorInkThickness\n * @property {HTMLInputElement} editorInkOpacity\n * @property {HTMLButtonElement} editorStampAddImage\n * @property {HTMLInputElement} editorFreeHighlightThickness\n * @property {HTMLButtonElement} editorHighlightShowAll\n */\n\nclass AnnotationEditorParams {\n /**\n * @param {AnnotationEditorParamsOptions} options\n * @param {EventBus} eventBus\n */\n constructor(options, eventBus) {\n this.eventBus = eventBus;\n this.#bindListeners(options);\n }\n\n /**\n * @param {AnnotationEditorParamsOptions} options\n */\n #bindListeners({\n editorFreeTextFontSize,\n editorFreeTextColor,\n editorInkColor,\n editorInkThickness,\n editorInkOpacity,\n editorStampAddImage,\n editorFreeHighlightThickness,\n editorHighlightShowAll,\n }) {\n const dispatchEvent = (typeStr, value) => {\n this.eventBus.dispatch(\"switchannotationeditorparams\", {\n source: this,\n type: AnnotationEditorParamsType[typeStr],\n value,\n });\n };\n editorFreeTextFontSize.addEventListener(\"input\", function () {\n dispatchEvent(\"FREETEXT_SIZE\", this.valueAsNumber);\n });\n editorFreeTextColor.addEventListener(\"input\", function () {\n dispatchEvent(\"FREETEXT_COLOR\", this.value);\n });\n editorInkColor.addEventListener(\"input\", function () {\n dispatchEvent(\"INK_COLOR\", this.value);\n });\n editorInkThickness.addEventListener(\"input\", function () {\n dispatchEvent(\"INK_THICKNESS\", this.valueAsNumber);\n });\n editorInkOpacity.addEventListener(\"input\", function () {\n dispatchEvent(\"INK_OPACITY\", this.valueAsNumber);\n });\n editorStampAddImage.addEventListener(\"click\", () => {\n dispatchEvent(\"CREATE\");\n });\n editorFreeHighlightThickness.addEventListener(\"input\", function () {\n dispatchEvent(\"HIGHLIGHT_THICKNESS\", this.valueAsNumber);\n });\n editorHighlightShowAll.addEventListener(\"click\", function () {\n const checked = this.getAttribute(\"aria-pressed\") === \"true\";\n this.setAttribute(\"aria-pressed\", !checked);\n dispatchEvent(\"HIGHLIGHT_SHOW_ALL\", !checked);\n });\n\n this.eventBus._on(\"annotationeditorparamschanged\", evt => {\n for (const [type, value] of evt.details) {\n switch (type) {\n case AnnotationEditorParamsType.FREETEXT_SIZE:\n editorFreeTextFontSize.value = value;\n break;\n case AnnotationEditorParamsType.FREETEXT_COLOR:\n editorFreeTextColor.value = value;\n break;\n case AnnotationEditorParamsType.INK_COLOR:\n editorInkColor.value = value;\n break;\n case AnnotationEditorParamsType.INK_THICKNESS:\n editorInkThickness.value = value;\n break;\n case AnnotationEditorParamsType.INK_OPACITY:\n editorInkOpacity.value = value;\n break;\n case AnnotationEditorParamsType.HIGHLIGHT_THICKNESS:\n editorFreeHighlightThickness.value = value;\n break;\n case AnnotationEditorParamsType.HIGHLIGHT_FREE:\n editorFreeHighlightThickness.disabled = !value;\n break;\n case AnnotationEditorParamsType.HIGHLIGHT_SHOW_ALL:\n editorHighlightShowAll.setAttribute(\"aria-pressed\", value);\n break;\n }\n }\n });\n }\n}\n\nexport { AnnotationEditorParams };\n","/* Copyright 2024 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\n// Used to compare floats: there is no exact equality due to rounding errors.\nconst PRECISION = 1e-1;\n\nclass CaretBrowsingMode {\n #mainContainer;\n\n #toolBarHeight;\n\n #viewerContainer;\n\n constructor(mainContainer, viewerContainer, toolbarContainer) {\n this.#mainContainer = mainContainer;\n this.#viewerContainer = viewerContainer;\n this.#toolBarHeight = toolbarContainer?.getBoundingClientRect().height ?? 0;\n }\n\n /**\n * Return true if the two rectangles are on the same line.\n * @param {DOMRect} rect1\n * @param {DOMRect} rect2\n * @returns {boolean}\n */\n #isOnSameLine(rect1, rect2) {\n const top1 = rect1.y;\n const bot1 = rect1.bottom;\n const mid1 = rect1.y + rect1.height / 2;\n\n const top2 = rect2.y;\n const bot2 = rect2.bottom;\n const mid2 = rect2.y + rect2.height / 2;\n\n return (top1 <= mid2 && mid2 <= bot1) || (top2 <= mid1 && mid1 <= bot2);\n }\n\n /**\n * Return `true` if the rectangle is:\n * - under the caret when `isUp === false`.\n * - over the caret when `isUp === true`.\n * @param {DOMRect} rect\n * @param {number} x\n * @param {number} y\n * @param {boolean} isUp\n * @returns {boolean}\n */\n #isUnderOver(rect, x, y, isUp) {\n const midY = rect.y + rect.height / 2;\n return (\n (isUp ? y >= midY : y <= midY) &&\n rect.x - PRECISION <= x &&\n x <= rect.right + PRECISION\n );\n }\n\n /**\n * Check if the rectangle is visible.\n * @param {DOMRect} rect\n * @returns {boolean}\n */\n #isVisible(rect) {\n return (\n rect.top >= this.#toolBarHeight &&\n rect.left >= 0 &&\n rect.bottom <=\n (window.innerHeight || document.documentElement.clientHeight) &&\n rect.right <= (window.innerWidth || document.documentElement.clientWidth)\n );\n }\n\n /**\n * Get the position of the caret.\n * @param {Selection} selection\n * @param {boolean} isUp\n * @returns {Array<number>}\n */\n #getCaretPosition(selection, isUp) {\n const { focusNode, focusOffset } = selection;\n const range = document.createRange();\n range.setStart(focusNode, focusOffset);\n range.setEnd(focusNode, focusOffset);\n const rect = range.getBoundingClientRect();\n\n return [rect.x, isUp ? rect.top : rect.bottom];\n }\n\n static #caretPositionFromPoint(x, y) {\n if (\n (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"MOZCENTRAL\")) &&\n !document.caretPositionFromPoint\n ) {\n const { startContainer: offsetNode, startOffset: offset } =\n document.caretRangeFromPoint(x, y);\n return { offsetNode, offset };\n }\n return document.caretPositionFromPoint(x, y);\n }\n\n #setCaretPositionHelper(selection, caretX, select, element, rect) {\n rect ||= element.getBoundingClientRect();\n if (caretX <= rect.x + PRECISION) {\n if (select) {\n selection.extend(element.firstChild, 0);\n } else {\n selection.setPosition(element.firstChild, 0);\n }\n return;\n }\n if (rect.right - PRECISION <= caretX) {\n const { lastChild } = element;\n if (select) {\n selection.extend(lastChild, lastChild.length);\n } else {\n selection.setPosition(lastChild, lastChild.length);\n }\n return;\n }\n\n const midY = rect.y + rect.height / 2;\n let caretPosition = CaretBrowsingMode.#caretPositionFromPoint(caretX, midY);\n let parentElement = caretPosition.offsetNode?.parentElement;\n if (parentElement && parentElement !== element) {\n // There is an element on top of the one in the text layer, so we\n // need to hide all the elements (except the one in the text layer)\n // at this position in order to get the correct caret position.\n const elementsAtPoint = document.elementsFromPoint(caretX, midY);\n const savedVisibilities = [];\n for (const el of elementsAtPoint) {\n if (el === element) {\n break;\n }\n const { style } = el;\n savedVisibilities.push([el, style.visibility]);\n style.visibility = \"hidden\";\n }\n caretPosition = CaretBrowsingMode.#caretPositionFromPoint(caretX, midY);\n parentElement = caretPosition.offsetNode?.parentElement;\n for (const [el, visibility] of savedVisibilities) {\n el.style.visibility = visibility;\n }\n }\n if (parentElement !== element) {\n // The element targeted by caretPositionFromPoint isn't in the text\n // layer.\n if (select) {\n selection.extend(element.firstChild, 0);\n } else {\n selection.setPosition(element.firstChild, 0);\n }\n return;\n }\n if (select) {\n selection.extend(caretPosition.offsetNode, caretPosition.offset);\n } else {\n selection.setPosition(caretPosition.offsetNode, caretPosition.offset);\n }\n }\n\n /**\n * Set the caret position or extend the selection (it depends on the select\n * parameter).\n * @param {boolean} select\n * @param {Selection} selection\n * @param {Element} newLineElement\n * @param {DOMRect} newLineElementRect\n * @param {number} caretX\n */\n #setCaretPosition(\n select,\n selection,\n newLineElement,\n newLineElementRect,\n caretX\n ) {\n if (this.#isVisible(newLineElementRect)) {\n this.#setCaretPositionHelper(\n selection,\n caretX,\n select,\n newLineElement,\n newLineElementRect\n );\n return;\n }\n this.#mainContainer.addEventListener(\n \"scrollend\",\n this.#setCaretPositionHelper.bind(\n this,\n selection,\n caretX,\n select,\n newLineElement,\n null\n ),\n { once: true }\n );\n newLineElement.scrollIntoView();\n }\n\n /**\n * Get the node on the next page.\n * @param {Element} textLayer\n * @param {boolean} isUp\n * @returns {Node}\n */\n #getNodeOnNextPage(textLayer, isUp) {\n while (true) {\n const page = textLayer.closest(\".page\");\n const pageNumber = parseInt(page.getAttribute(\"data-page-number\"));\n const nextPage = isUp ? pageNumber - 1 : pageNumber + 1;\n textLayer = this.#viewerContainer.querySelector(\n `.page[data-page-number=\"${nextPage}\"] .textLayer`\n );\n if (!textLayer) {\n return null;\n }\n const walker = document.createTreeWalker(textLayer, NodeFilter.SHOW_TEXT);\n const node = isUp ? walker.lastChild() : walker.firstChild();\n if (node) {\n return node;\n }\n }\n }\n\n /**\n * Move the caret in the given direction.\n * @param {boolean} isUp\n * @param {boolean} select\n */\n moveCaret(isUp, select) {\n const selection = document.getSelection();\n if (selection.rangeCount === 0) {\n return;\n }\n const { focusNode } = selection;\n const focusElement =\n focusNode.nodeType !== Node.ELEMENT_NODE\n ? focusNode.parentElement\n : focusNode;\n const root = focusElement.closest(\".textLayer\");\n if (!root) {\n return;\n }\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT);\n walker.currentNode = focusNode;\n\n // Move to the next element which is not on the same line as the focus\n // element.\n const focusRect = focusElement.getBoundingClientRect();\n let newLineElement = null;\n const nodeIterator = (\n isUp ? walker.previousSibling : walker.nextSibling\n ).bind(walker);\n while (nodeIterator()) {\n const element = walker.currentNode.parentElement;\n if (!this.#isOnSameLine(focusRect, element.getBoundingClientRect())) {\n newLineElement = element;\n break;\n }\n }\n\n if (!newLineElement) {\n // Need to find the next line on the next page.\n const node = this.#getNodeOnNextPage(root, isUp);\n if (!node) {\n return;\n }\n if (select) {\n const lastNode =\n (isUp ? walker.firstChild() : walker.lastChild()) || focusNode;\n selection.extend(lastNode, isUp ? 0 : lastNode.length);\n const range = document.createRange();\n range.setStart(node, isUp ? node.length : 0);\n range.setEnd(node, isUp ? node.length : 0);\n selection.addRange(range);\n return;\n }\n const [caretX] = this.#getCaretPosition(selection, isUp);\n const { parentElement } = node;\n this.#setCaretPosition(\n select,\n selection,\n parentElement,\n parentElement.getBoundingClientRect(),\n caretX\n );\n return;\n }\n\n // We've a candidate for the next line now we want to find the first element\n // which is under/over the caret.\n const [caretX, caretY] = this.#getCaretPosition(selection, isUp);\n const newLineElementRect = newLineElement.getBoundingClientRect();\n\n // Maybe the element on the new line is a valid candidate.\n if (this.#isUnderOver(newLineElementRect, caretX, caretY, isUp)) {\n this.#setCaretPosition(\n select,\n selection,\n newLineElement,\n newLineElementRect,\n caretX\n );\n return;\n }\n\n while (nodeIterator()) {\n // Search an element on the same line as newLineElement\n // which could be under/over the caret.\n const element = walker.currentNode.parentElement;\n const elementRect = element.getBoundingClientRect();\n if (!this.#isOnSameLine(newLineElementRect, elementRect)) {\n break;\n }\n if (this.#isUnderOver(elementRect, caretX, caretY, isUp)) {\n // We found the element.\n this.#setCaretPosition(select, selection, element, elementRect, caretX);\n return;\n }\n }\n\n // No element has been found so just put the caret on the element on the new\n // line.\n this.#setCaretPosition(\n select,\n selection,\n newLineElement,\n newLineElementRect,\n caretX\n );\n }\n}\n\nexport { CaretBrowsingMode };\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\n/** @typedef {import(\"./interfaces\").IDownloadManager} IDownloadManager */\n\nimport { createValidAbsoluteUrl, isPdfFile } from \"pdfjs-lib\";\n\nif (typeof PDFJSDev !== \"undefined\" && !PDFJSDev.test(\"CHROME || GENERIC\")) {\n throw new Error(\n 'Module \"pdfjs-web/download_manager\" shall not be used ' +\n \"outside CHROME and GENERIC builds.\"\n );\n}\n\nfunction download(blobUrl, filename) {\n const 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 recent Firefox versions,\n // otherwise .click() is ignored.\n (document.body || document.documentElement).append(a);\n a.click();\n a.remove();\n}\n\n/**\n * @implements {IDownloadManager}\n */\nclass DownloadManager {\n #openBlobUrls = new WeakMap();\n\n downloadUrl(url, filename, _options) {\n if (!createValidAbsoluteUrl(url, \"http://example.com\")) {\n console.error(`downloadUrl - not a valid URL: ${url}`);\n return; // restricted/invalid URL\n }\n download(url + \"#pdfjs.action=download\", filename);\n }\n\n downloadData(data, filename, contentType) {\n const blobUrl = URL.createObjectURL(\n new Blob([data], { type: contentType })\n );\n download(blobUrl, filename);\n }\n\n /**\n * @returns {boolean} Indicating if the data was opened.\n */\n openOrDownloadData(data, filename, dest = null) {\n const isPdfData = isPdfFile(filename);\n const contentType = isPdfData ? \"application/pdf\" : \"\";\n\n if (\n (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"COMPONENTS\")) &&\n isPdfData\n ) {\n let blobUrl = this.#openBlobUrls.get(data);\n if (!blobUrl) {\n blobUrl = URL.createObjectURL(new Blob([data], { type: contentType }));\n this.#openBlobUrls.set(data, blobUrl);\n }\n let viewerUrl;\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n // The current URL is the viewer, let's use it and append the file.\n viewerUrl = \"?file=\" + encodeURIComponent(blobUrl + \"#\" + filename);\n } else if (PDFJSDev.test(\"CHROME\")) {\n // In the Chrome extension, the URL is rewritten using the history API\n // in viewer.js, so an absolute URL must be generated.\n viewerUrl =\n // eslint-disable-next-line no-undef\n chrome.runtime.getURL(\"/content/web/viewer.html\") +\n \"?file=\" +\n encodeURIComponent(blobUrl + \"#\" + filename);\n }\n if (dest) {\n viewerUrl += `#${escape(dest)}`;\n }\n\n try {\n window.open(viewerUrl);\n return true;\n } catch (ex) {\n console.error(`openOrDownloadData: ${ex}`);\n // Release the `blobUrl`, since opening it failed, and fallback to\n // downloading the PDF file.\n URL.revokeObjectURL(blobUrl);\n this.#openBlobUrls.delete(data);\n }\n }\n\n this.downloadData(data, filename, contentType);\n return false;\n }\n\n download(blob, url, filename, _options) {\n const blobUrl = URL.createObjectURL(blob);\n download(blobUrl, filename);\n }\n}\n\nexport { DownloadManager };\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\nclass OverlayManager {\n #overlays = new WeakMap();\n\n #active = null;\n\n get active() {\n return this.#active;\n }\n\n /**\n * @param {HTMLDialogElement} dialog - The overlay's DOM element.\n * @param {boolean} [canForceClose] - Indicates if opening the overlay closes\n * an active overlay. The default is `false`.\n * @returns {Promise} A promise that is resolved when the overlay has been\n * registered.\n */\n async register(dialog, canForceClose = false) {\n if (typeof dialog !== \"object\") {\n throw new Error(\"Not enough parameters.\");\n } else if (this.#overlays.has(dialog)) {\n throw new Error(\"The overlay is already registered.\");\n }\n this.#overlays.set(dialog, { canForceClose });\n\n dialog.addEventListener(\"cancel\", evt => {\n this.#active = null;\n });\n }\n\n /**\n * @param {HTMLDialogElement} dialog - The overlay's DOM element.\n * @returns {Promise} A promise that is resolved when the overlay has been\n * opened.\n */\n async open(dialog) {\n if (!this.#overlays.has(dialog)) {\n throw new Error(\"The overlay does not exist.\");\n } else if (this.#active) {\n if (this.#active === dialog) {\n throw new Error(\"The overlay is already active.\");\n } else if (this.#overlays.get(dialog).canForceClose) {\n await this.close();\n } else {\n throw new Error(\"Another overlay is currently active.\");\n }\n }\n this.#active = dialog;\n dialog.showModal();\n }\n\n /**\n * @param {HTMLDialogElement} dialog - The overlay's DOM element.\n * @returns {Promise} A promise that is resolved when the overlay has been\n * closed.\n */\n async close(dialog = this.#active) {\n if (!this.#overlays.has(dialog)) {\n throw new Error(\"The overlay does not exist.\");\n } else if (!this.#active) {\n throw new Error(\"The overlay is currently not active.\");\n } else if (this.#active !== dialog) {\n throw new Error(\"Another overlay is currently active.\");\n }\n dialog.close();\n this.#active = null;\n }\n}\n\nexport { OverlayManager };\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\n/** @typedef {import(\"./overlay_manager.js\").OverlayManager} OverlayManager */\n\nimport { PasswordResponses } from \"pdfjs-lib\";\n\n/**\n * @typedef {Object} PasswordPromptOptions\n * @property {HTMLDialogElement} dialog - The overlay's DOM element.\n * @property {HTMLParagraphElement} label - Label containing instructions for\n * entering the password.\n * @property {HTMLInputElement} input - Input field for entering the password.\n * @property {HTMLButtonElement} submitButton - Button for submitting the\n * password.\n * @property {HTMLButtonElement} cancelButton - Button for cancelling password\n * entry.\n */\n\nclass PasswordPrompt {\n #activeCapability = null;\n\n #updateCallback = null;\n\n #reason = null;\n\n /**\n * @param {PasswordPromptOptions} options\n * @param {OverlayManager} overlayManager - Manager for the viewer overlays.\n * @param {boolean} [isViewerEmbedded] - If the viewer is embedded, in e.g.\n * an <iframe> or an <object>. The default value is `false`.\n */\n constructor(options, overlayManager, isViewerEmbedded = false) {\n this.dialog = options.dialog;\n this.label = options.label;\n this.input = options.input;\n this.submitButton = options.submitButton;\n this.cancelButton = options.cancelButton;\n this.overlayManager = overlayManager;\n this._isViewerEmbedded = isViewerEmbedded;\n\n // Attach the event listeners.\n this.submitButton.addEventListener(\"click\", this.#verify.bind(this));\n this.cancelButton.addEventListener(\"click\", this.close.bind(this));\n this.input.addEventListener(\"keydown\", e => {\n if (e.keyCode === /* Enter = */ 13) {\n this.#verify();\n }\n });\n\n this.overlayManager.register(this.dialog, /* canForceClose = */ true);\n\n this.dialog.addEventListener(\"close\", this.#cancel.bind(this));\n }\n\n async open() {\n await this.#activeCapability?.promise;\n this.#activeCapability = Promise.withResolvers();\n\n try {\n await this.overlayManager.open(this.dialog);\n } catch (ex) {\n this.#activeCapability.resolve();\n throw ex;\n }\n\n const passwordIncorrect =\n this.#reason === PasswordResponses.INCORRECT_PASSWORD;\n\n if (!this._isViewerEmbedded || passwordIncorrect) {\n this.input.focus();\n }\n this.label.setAttribute(\n \"data-l10n-id\",\n `pdfjs-password-${passwordIncorrect ? \"invalid\" : \"label\"}`\n );\n }\n\n async close() {\n if (this.overlayManager.active === this.dialog) {\n this.overlayManager.close(this.dialog);\n }\n }\n\n #verify() {\n const password = this.input.value;\n if (password?.length > 0) {\n this.#invokeCallback(password);\n }\n }\n\n #cancel() {\n this.#invokeCallback(new Error(\"PasswordPrompt cancelled.\"));\n this.#activeCapability.resolve();\n }\n\n #invokeCallback(password) {\n if (!this.#updateCallback) {\n return; // Ensure that the callback is only invoked once.\n }\n this.close();\n this.input.value = \"\";\n\n this.#updateCallback(password);\n this.#updateCallback = null;\n }\n\n async setUpdateCallback(updateCallback, reason) {\n if (this.#activeCapability) {\n await this.#activeCapability.promise;\n }\n this.#updateCallback = updateCallback;\n this.#reason = reason;\n }\n}\n\nexport { PasswordPrompt };\n","/* Copyright 2020 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 { removeNullCharacters } from \"./ui_utils.js\";\n\nconst TREEITEM_OFFSET_TOP = -100; // px\nconst TREEITEM_SELECTED_CLASS = \"selected\";\n\nclass BaseTreeViewer {\n constructor(options) {\n if (this.constructor === BaseTreeViewer) {\n throw new Error(\"Cannot initialize BaseTreeViewer.\");\n }\n this.container = options.container;\n this.eventBus = options.eventBus;\n this._l10n = options.l10n;\n\n this.reset();\n }\n\n reset() {\n this._pdfDocument = null;\n this._lastToggleIsShow = true;\n this._currentTreeItem = null;\n\n // Remove the tree from the DOM.\n this.container.textContent = \"\";\n // Ensure that the left (right in RTL locales) margin is always reset,\n // to prevent incorrect tree alignment if a new document is opened.\n this.container.classList.remove(\"treeWithDeepNesting\");\n }\n\n /**\n * @protected\n */\n _dispatchEvent(count) {\n throw new Error(\"Not implemented: _dispatchEvent\");\n }\n\n /**\n * @protected\n */\n _bindLink(element, params) {\n throw new Error(\"Not implemented: _bindLink\");\n }\n\n /**\n * @private\n */\n _normalizeTextContent(str) {\n // Chars in range [0x01-0x1F] will be replaced with a white space\n // and 0x00 by \"\".\n return (\n removeNullCharacters(str, /* replaceInvisible */ true) ||\n /* en dash = */ \"\\u2013\"\n );\n }\n\n /**\n * Prepend a button before a tree item which allows the user to collapse or\n * expand all tree items at that level; see `_toggleTreeItem`.\n * @param {HTMLDivElement} div\n * @param {boolean|object} [hidden]\n * @protected\n */\n _addToggleButton(div, hidden = false) {\n const toggler = document.createElement(\"div\");\n toggler.className = \"treeItemToggler\";\n if (hidden) {\n toggler.classList.add(\"treeItemsHidden\");\n }\n toggler.onclick = evt => {\n evt.stopPropagation();\n toggler.classList.toggle(\"treeItemsHidden\");\n\n if (evt.shiftKey) {\n const shouldShowAll = !toggler.classList.contains(\"treeItemsHidden\");\n this._toggleTreeItem(div, shouldShowAll);\n }\n };\n div.prepend(toggler);\n }\n\n /**\n * Collapse or expand the subtree of a tree item.\n *\n * @param {Element} root - the root of the item (sub)tree.\n * @param {boolean} show - whether to show the item (sub)tree. If false,\n * the item subtree rooted at `root` will be collapsed.\n * @private\n */\n _toggleTreeItem(root, show = false) {\n // Pause translation when collapsing/expanding the subtree.\n this._l10n.pause();\n\n this._lastToggleIsShow = show;\n for (const toggler of root.querySelectorAll(\".treeItemToggler\")) {\n toggler.classList.toggle(\"treeItemsHidden\", !show);\n }\n this._l10n.resume();\n }\n\n /**\n * Collapse or expand all subtrees of the `container`.\n * @private\n */\n _toggleAllTreeItems() {\n this._toggleTreeItem(this.container, !this._lastToggleIsShow);\n }\n\n /**\n * @private\n */\n _finishRendering(fragment, count, hasAnyNesting = false) {\n if (hasAnyNesting) {\n this.container.classList.add(\"treeWithDeepNesting\");\n\n this._lastToggleIsShow = !fragment.querySelector(\".treeItemsHidden\");\n }\n // Pause translation when inserting the tree into the DOM.\n this._l10n.pause();\n this.container.append(fragment);\n this._l10n.resume();\n\n this._dispatchEvent(count);\n }\n\n render(params) {\n throw new Error(\"Not implemented: render\");\n }\n\n /**\n * @private\n */\n _updateCurrentTreeItem(treeItem = null) {\n if (this._currentTreeItem) {\n // Ensure that the current treeItem-selection is always removed.\n this._currentTreeItem.classList.remove(TREEITEM_SELECTED_CLASS);\n this._currentTreeItem = null;\n }\n if (treeItem) {\n treeItem.classList.add(TREEITEM_SELECTED_CLASS);\n this._currentTreeItem = treeItem;\n }\n }\n\n /**\n * @private\n */\n _scrollToCurrentTreeItem(treeItem) {\n if (!treeItem) {\n return;\n }\n // Pause translation when expanding the treeItem.\n this._l10n.pause();\n // Ensure that the treeItem is *fully* expanded, such that it will first of\n // all be visible and secondly that scrolling it into view works correctly.\n let currentNode = treeItem.parentNode;\n while (currentNode && currentNode !== this.container) {\n if (currentNode.classList.contains(\"treeItem\")) {\n const toggler = currentNode.firstElementChild;\n toggler?.classList.remove(\"treeItemsHidden\");\n }\n currentNode = currentNode.parentNode;\n }\n this._l10n.resume();\n\n this._updateCurrentTreeItem(treeItem);\n\n this.container.scrollTo(\n treeItem.offsetLeft,\n treeItem.offsetTop + TREEITEM_OFFSET_TOP\n );\n }\n}\n\nexport { BaseTreeViewer };\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\n/** @typedef {import(\"./event_utils.js\").EventBus} EventBus */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"./download_manager.js\").DownloadManager} DownloadManager */\n\nimport { BaseTreeViewer } from \"./base_tree_viewer.js\";\nimport { waitOnEventOrTimeout } from \"./event_utils.js\";\n\n/**\n * @typedef {Object} PDFAttachmentViewerOptions\n * @property {HTMLDivElement} container - The viewer element.\n * @property {EventBus} eventBus - The application event bus.\n * @property {DownloadManager} downloadManager - The download manager.\n */\n\n/**\n * @typedef {Object} PDFAttachmentViewerRenderParameters\n * @property {Object|null} attachments - A lookup table of attachment objects.\n * @property {boolean} [keepRenderedCapability]\n */\n\nclass PDFAttachmentViewer extends BaseTreeViewer {\n /**\n * @param {PDFAttachmentViewerOptions} options\n */\n constructor(options) {\n super(options);\n this.downloadManager = options.downloadManager;\n\n this.eventBus._on(\n \"fileattachmentannotation\",\n this.#appendAttachment.bind(this)\n );\n }\n\n reset(keepRenderedCapability = false) {\n super.reset();\n this._attachments = null;\n\n if (!keepRenderedCapability) {\n // The only situation in which the `_renderedCapability` should *not* be\n // replaced is when appending FileAttachment annotations.\n this._renderedCapability = Promise.withResolvers();\n }\n this._pendingDispatchEvent = false;\n }\n\n /**\n * @protected\n */\n async _dispatchEvent(attachmentsCount) {\n this._renderedCapability.resolve();\n\n if (attachmentsCount === 0 && !this._pendingDispatchEvent) {\n // Delay the event when no \"regular\" attachments exist, to allow time for\n // parsing of any FileAttachment annotations that may be present on the\n // *initially* rendered page; this reduces the likelihood of temporarily\n // disabling the attachmentsView when the `PDFSidebar` handles the event.\n this._pendingDispatchEvent = true;\n\n await waitOnEventOrTimeout({\n target: this.eventBus,\n name: \"annotationlayerrendered\",\n delay: 1000,\n });\n\n if (!this._pendingDispatchEvent) {\n return; // There was already another `_dispatchEvent`-call`.\n }\n }\n this._pendingDispatchEvent = false;\n\n this.eventBus.dispatch(\"attachmentsloaded\", {\n source: this,\n attachmentsCount,\n });\n }\n\n /**\n * @protected\n */\n _bindLink(element, { content, description, filename }) {\n if (description) {\n element.title = description;\n }\n element.onclick = () => {\n this.downloadManager.openOrDownloadData(content, filename);\n return false;\n };\n }\n\n /**\n * @param {PDFAttachmentViewerRenderParameters} params\n */\n render({ attachments, keepRenderedCapability = false }) {\n if (this._attachments) {\n this.reset(keepRenderedCapability);\n }\n this._attachments = attachments || null;\n\n if (!attachments) {\n this._dispatchEvent(/* attachmentsCount = */ 0);\n return;\n }\n\n const fragment = document.createDocumentFragment();\n let attachmentsCount = 0;\n for (const name in attachments) {\n const item = attachments[name];\n\n const div = document.createElement(\"div\");\n div.className = \"treeItem\";\n\n const element = document.createElement(\"a\");\n this._bindLink(element, item);\n element.textContent = this._normalizeTextContent(item.filename);\n\n div.append(element);\n\n fragment.append(div);\n attachmentsCount++;\n }\n\n this._finishRendering(fragment, attachmentsCount);\n }\n\n /**\n * Used to append FileAttachment annotations to the sidebar.\n */\n #appendAttachment(item) {\n const renderedPromise = this._renderedCapability.promise;\n\n renderedPromise.then(() => {\n if (renderedPromise !== this._renderedCapability.promise) {\n return; // The FileAttachment annotation belongs to a previous document.\n }\n const attachments = this._attachments || Object.create(null);\n\n for (const name in attachments) {\n if (item.filename === name) {\n return; // Ignore the new attachment if it already exists.\n }\n }\n attachments[item.filename] = item;\n\n this.render({\n attachments,\n keepRenderedCapability: true,\n });\n });\n }\n}\n\nexport { PDFAttachmentViewer };\n","/* Copyright 2013 Rob Wu <rob@robwu.nl>\n * https://github.com/Rob--W/grab-to-pan.js\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\n// Class name of element which can be grabbed.\nconst CSS_CLASS_GRAB = \"grab-to-pan-grab\";\n\n/**\n * @typedef {Object} GrabToPanOptions\n * @property {HTMLElement} element\n */\n\nclass GrabToPan {\n /**\n * Construct a GrabToPan instance for a given HTML element.\n * @param {GrabToPanOptions} options\n */\n constructor({ element }) {\n this.element = element;\n this.document = element.ownerDocument;\n\n // Bind the contexts to ensure that `this` always points to\n // the GrabToPan instance.\n this.activate = this.activate.bind(this);\n this.deactivate = this.deactivate.bind(this);\n this.toggle = this.toggle.bind(this);\n this._onMouseDown = this.#onMouseDown.bind(this);\n this._onMouseMove = this.#onMouseMove.bind(this);\n this._endPan = this.#endPan.bind(this);\n\n // This overlay will be inserted in the document when the mouse moves during\n // a grab operation, to ensure that the cursor has the desired appearance.\n const overlay = (this.overlay = document.createElement(\"div\"));\n overlay.className = \"grab-to-pan-grabbing\";\n }\n\n /**\n * Bind a mousedown event to the element to enable grab-detection.\n */\n activate() {\n if (!this.active) {\n this.active = true;\n this.element.addEventListener(\"mousedown\", this._onMouseDown, true);\n this.element.classList.add(CSS_CLASS_GRAB);\n }\n }\n\n /**\n * Removes all events. Any pending pan session is immediately stopped.\n */\n deactivate() {\n if (this.active) {\n this.active = false;\n this.element.removeEventListener(\"mousedown\", this._onMouseDown, true);\n this._endPan();\n this.element.classList.remove(CSS_CLASS_GRAB);\n }\n }\n\n toggle() {\n if (this.active) {\n this.deactivate();\n } else {\n this.activate();\n }\n }\n\n /**\n * Whether to not pan if the target element is clicked.\n * Override this method to change the default behaviour.\n *\n * @param {Element} node - The target of the event.\n * @returns {boolean} Whether to not react to the click event.\n */\n ignoreTarget(node) {\n // Check whether the clicked element is, a child of, an input element/link.\n return node.matches(\n \"a[href], a[href] *, input, textarea, button, button *, select, option\"\n );\n }\n\n #onMouseDown(event) {\n if (event.button !== 0 || this.ignoreTarget(event.target)) {\n return;\n }\n if (event.originalTarget) {\n try {\n // eslint-disable-next-line no-unused-expressions\n event.originalTarget.tagName;\n } catch {\n // Mozilla-specific: element is a scrollbar (XUL element)\n return;\n }\n }\n\n this.scrollLeftStart = this.element.scrollLeft;\n this.scrollTopStart = this.element.scrollTop;\n this.clientXStart = event.clientX;\n this.clientYStart = event.clientY;\n this.document.addEventListener(\"mousemove\", this._onMouseMove, true);\n this.document.addEventListener(\"mouseup\", this._endPan, true);\n // When a scroll event occurs before a mousemove, assume that the user\n // dragged a scrollbar (necessary for Opera Presto, Safari and IE)\n // (not needed for Chrome/Firefox)\n this.element.addEventListener(\"scroll\", this._endPan, true);\n event.preventDefault();\n event.stopPropagation();\n\n const focusedElement = document.activeElement;\n if (focusedElement && !focusedElement.contains(event.target)) {\n focusedElement.blur();\n }\n }\n\n #onMouseMove(event) {\n this.element.removeEventListener(\"scroll\", this._endPan, true);\n if (!(event.buttons & 1)) {\n // The left mouse button is released.\n this._endPan();\n return;\n }\n const xDiff = event.clientX - this.clientXStart;\n const yDiff = event.clientY - this.clientYStart;\n this.element.scrollTo({\n top: this.scrollTopStart - yDiff,\n left: this.scrollLeftStart - xDiff,\n behavior: \"instant\",\n });\n\n if (!this.overlay.parentNode) {\n document.body.append(this.overlay);\n }\n }\n\n #endPan() {\n this.element.removeEventListener(\"scroll\", this._endPan, true);\n this.document.removeEventListener(\"mousemove\", this._onMouseMove, true);\n this.document.removeEventListener(\"mouseup\", this._endPan, true);\n // Note: ChildNode.remove doesn't throw if the parentNode is undefined.\n this.overlay.remove();\n }\n}\n\nexport { GrabToPan };\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\n/** @typedef {import(\"./event_utils.js\").EventBus} EventBus */\n\nimport { AnnotationEditorType, shadow } from \"pdfjs-lib\";\nimport { CursorTool, PresentationModeState } from \"./ui_utils.js\";\nimport { GrabToPan } from \"./grab_to_pan.js\";\n\n/**\n * @typedef {Object} PDFCursorToolsOptions\n * @property {HTMLDivElement} container - The document container.\n * @property {EventBus} eventBus - The application event bus.\n * @property {number} [cursorToolOnLoad] - The cursor tool that will be enabled\n * on load; the constants from {CursorTool} should be used. The default value\n * is `CursorTool.SELECT`.\n */\n\nclass PDFCursorTools {\n #active = CursorTool.SELECT;\n\n #prevActive = null;\n\n /**\n * @param {PDFCursorToolsOptions} options\n */\n constructor({ container, eventBus, cursorToolOnLoad = CursorTool.SELECT }) {\n this.container = container;\n this.eventBus = eventBus;\n\n this.#addEventListeners();\n\n // Defer the initial `switchTool` call, to give other viewer components\n // time to initialize *and* register 'cursortoolchanged' event listeners.\n Promise.resolve().then(() => {\n this.switchTool(cursorToolOnLoad);\n });\n }\n\n /**\n * @type {number} One of the values in {CursorTool}.\n */\n get activeTool() {\n return this.#active;\n }\n\n /**\n * @param {number} tool - The cursor mode that should be switched to,\n * must be one of the values in {CursorTool}.\n */\n switchTool(tool) {\n if (this.#prevActive !== null) {\n // Cursor tools cannot be used in PresentationMode/AnnotationEditor.\n return;\n }\n if (tool === this.#active) {\n return; // The requested tool is already active.\n }\n\n const disableActiveTool = () => {\n switch (this.#active) {\n case CursorTool.SELECT:\n break;\n case CursorTool.HAND:\n this._handTool.deactivate();\n break;\n case CursorTool.ZOOM:\n /* falls through */\n }\n };\n\n // Enable the new cursor tool.\n switch (tool) {\n case CursorTool.SELECT:\n disableActiveTool();\n break;\n case CursorTool.HAND:\n disableActiveTool();\n this._handTool.activate();\n break;\n case CursorTool.ZOOM:\n /* falls through */\n default:\n console.error(`switchTool: \"${tool}\" is an unsupported value.`);\n return;\n }\n // Update the active tool *after* it has been validated above,\n // in order to prevent setting it to an invalid state.\n this.#active = tool;\n\n this.eventBus.dispatch(\"cursortoolchanged\", {\n source: this,\n tool,\n });\n }\n\n #addEventListeners() {\n this.eventBus._on(\"switchcursortool\", evt => {\n if (!evt.reset) {\n this.switchTool(evt.tool);\n } else if (this.#prevActive !== null) {\n annotationEditorMode = AnnotationEditorType.NONE;\n presentationModeState = PresentationModeState.NORMAL;\n\n enableActive();\n }\n });\n\n let annotationEditorMode = AnnotationEditorType.NONE,\n presentationModeState = PresentationModeState.NORMAL;\n\n const disableActive = () => {\n const prevActive = this.#active;\n\n this.switchTool(CursorTool.SELECT);\n this.#prevActive ??= prevActive; // Keep track of the first one.\n };\n const enableActive = () => {\n const prevActive = this.#prevActive;\n\n if (\n prevActive !== null &&\n annotationEditorMode === AnnotationEditorType.NONE &&\n presentationModeState === PresentationModeState.NORMAL\n ) {\n this.#prevActive = null;\n this.switchTool(prevActive);\n }\n };\n\n this.eventBus._on(\"annotationeditormodechanged\", ({ mode }) => {\n annotationEditorMode = mode;\n\n if (mode === AnnotationEditorType.NONE) {\n enableActive();\n } else {\n disableActive();\n }\n });\n\n this.eventBus._on(\"presentationmodechanged\", ({ state }) => {\n presentationModeState = state;\n\n if (state === PresentationModeState.NORMAL) {\n enableActive();\n } else if (state === PresentationModeState.FULLSCREEN) {\n disableActive();\n }\n });\n }\n\n /**\n * @private\n */\n get _handTool() {\n return shadow(\n this,\n \"_handTool\",\n new GrabToPan({\n element: this.container,\n })\n );\n }\n}\n\nexport { PDFCursorTools };\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\n/** @typedef {import(\"./event_utils.js\").EventBus} EventBus */\n/** @typedef {import(\"./interfaces.js\").IL10n} IL10n */\n/** @typedef {import(\"./overlay_manager.js\").OverlayManager} OverlayManager */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"../src/display/api.js\").PDFDocumentProxy} PDFDocumentProxy */\n\nimport { getPageSizeInches, isPortraitOrientation } from \"./ui_utils.js\";\nimport { PDFDateString } from \"pdfjs-lib\";\n\nconst DEFAULT_FIELD_CONTENT = \"-\";\n\n// See https://en.wikibooks.org/wiki/Lentis/Conversion_to_the_Metric_Standard_in_the_United_States\nconst NON_METRIC_LOCALES = [\"en-us\", \"en-lr\", \"my\"];\n\n// Should use the format: `width x height`, in portrait orientation. The names,\n// which are l10n-ids, should be lowercase.\n// See https://en.wikipedia.org/wiki/Paper_size\nconst US_PAGE_NAMES = {\n \"8.5x11\": \"letter\",\n \"8.5x14\": \"legal\",\n};\nconst METRIC_PAGE_NAMES = {\n \"297x420\": \"a-three\",\n \"210x297\": \"a-four\",\n};\n\nfunction getPageName(size, isPortrait, pageNames) {\n const width = isPortrait ? size.width : size.height;\n const height = isPortrait ? size.height : size.width;\n\n return pageNames[`${width}x${height}`];\n}\n\n/**\n * @typedef {Object} PDFDocumentPropertiesOptions\n * @property {HTMLDialogElement} dialog - The overlay's DOM element.\n * @property {Object} fields - Names and elements of the overlay's fields.\n * @property {HTMLButtonElement} closeButton - Button for closing the overlay.\n */\n\nclass PDFDocumentProperties {\n #fieldData = null;\n\n /**\n * @param {PDFDocumentPropertiesOptions} options\n * @param {OverlayManager} overlayManager - Manager for the viewer overlays.\n * @param {EventBus} eventBus - The application event bus.\n * @param {IL10n} l10n - Localization service.\n * @param {function} fileNameLookup - The function that is used to lookup\n * the document fileName.\n */\n constructor(\n { dialog, fields, closeButton },\n overlayManager,\n eventBus,\n l10n,\n fileNameLookup\n ) {\n this.dialog = dialog;\n this.fields = fields;\n this.overlayManager = overlayManager;\n this.l10n = l10n;\n this._fileNameLookup = fileNameLookup;\n\n this.#reset();\n // Bind the event listener for the Close button.\n closeButton.addEventListener(\"click\", this.close.bind(this));\n\n this.overlayManager.register(this.dialog);\n\n eventBus._on(\"pagechanging\", evt => {\n this._currentPageNumber = evt.pageNumber;\n });\n eventBus._on(\"rotationchanging\", evt => {\n this._pagesRotation = evt.pagesRotation;\n });\n\n this._isNonMetricLocale = NON_METRIC_LOCALES.includes(l10n.getLanguage());\n }\n\n /**\n * Open the document properties overlay.\n */\n async open() {\n await Promise.all([\n this.overlayManager.open(this.dialog),\n this._dataAvailableCapability.promise,\n ]);\n const currentPageNumber = this._currentPageNumber;\n const pagesRotation = this._pagesRotation;\n\n // If the document properties were previously fetched (for this PDF file),\n // just update the dialog immediately to avoid redundant lookups.\n if (\n this.#fieldData &&\n currentPageNumber === this.#fieldData._currentPageNumber &&\n pagesRotation === this.#fieldData._pagesRotation\n ) {\n this.#updateUI();\n return;\n }\n\n // Get the document properties.\n const {\n info,\n /* metadata, */\n /* contentDispositionFilename, */\n contentLength,\n } = await this.pdfDocument.getMetadata();\n\n const [\n fileName,\n fileSize,\n creationDate,\n modificationDate,\n pageSize,\n isLinearized,\n ] = await Promise.all([\n this._fileNameLookup(),\n this.#parseFileSize(contentLength),\n this.#parseDate(info.CreationDate),\n this.#parseDate(info.ModDate),\n // eslint-disable-next-line arrow-body-style\n this.pdfDocument.getPage(currentPageNumber).then(pdfPage => {\n return this.#parsePageSize(getPageSizeInches(pdfPage), pagesRotation);\n }),\n this.#parseLinearization(info.IsLinearized),\n ]);\n\n this.#fieldData = Object.freeze({\n fileName,\n fileSize,\n title: info.Title,\n author: info.Author,\n subject: info.Subject,\n keywords: info.Keywords,\n creationDate,\n modificationDate,\n creator: info.Creator,\n producer: info.Producer,\n version: info.PDFFormatVersion,\n pageCount: this.pdfDocument.numPages,\n pageSize,\n linearized: isLinearized,\n _currentPageNumber: currentPageNumber,\n _pagesRotation: pagesRotation,\n });\n this.#updateUI();\n\n // Get the correct fileSize, since it may not have been available\n // or could potentially be wrong.\n const { length } = await this.pdfDocument.getDownloadInfo();\n if (contentLength === length) {\n return; // The fileSize has already been correctly set.\n }\n const data = Object.assign(Object.create(null), this.#fieldData);\n data.fileSize = await this.#parseFileSize(length);\n\n this.#fieldData = Object.freeze(data);\n this.#updateUI();\n }\n\n /**\n * Close the document properties overlay.\n */\n async close() {\n this.overlayManager.close(this.dialog);\n }\n\n /**\n * Set a reference to the PDF document in order to populate the dialog fields\n * with the document properties. Note that the dialog will contain no\n * information if this method is not called.\n *\n * @param {PDFDocumentProxy} pdfDocument - A reference to the PDF document.\n */\n setDocument(pdfDocument) {\n if (this.pdfDocument) {\n this.#reset();\n this.#updateUI(true);\n }\n if (!pdfDocument) {\n return;\n }\n this.pdfDocument = pdfDocument;\n\n this._dataAvailableCapability.resolve();\n }\n\n #reset() {\n this.pdfDocument = null;\n\n this.#fieldData = null;\n this._dataAvailableCapability = Promise.withResolvers();\n this._currentPageNumber = 1;\n this._pagesRotation = 0;\n }\n\n /**\n * Always updates all of the dialog fields, to prevent inconsistent UI state.\n * NOTE: If the contents of a particular field is neither a non-empty string,\n * nor a number, it will fall back to `DEFAULT_FIELD_CONTENT`.\n */\n #updateUI(reset = false) {\n if (reset || !this.#fieldData) {\n for (const id in this.fields) {\n this.fields[id].textContent = DEFAULT_FIELD_CONTENT;\n }\n return;\n }\n if (this.overlayManager.active !== this.dialog) {\n // Don't bother updating the dialog if has already been closed,\n // since it will be updated the next time `this.open` is called.\n return;\n }\n for (const id in this.fields) {\n const content = this.#fieldData[id];\n this.fields[id].textContent =\n content || content === 0 ? content : DEFAULT_FIELD_CONTENT;\n }\n }\n\n async #parseFileSize(fileSize = 0) {\n const kb = fileSize / 1024,\n mb = kb / 1024;\n if (!kb) {\n return undefined;\n }\n return this.l10n.get(`pdfjs-document-properties-${mb >= 1 ? \"mb\" : \"kb\"}`, {\n size_mb: mb >= 1 && (+mb.toPrecision(3)).toLocaleString(),\n size_kb: mb < 1 && (+kb.toPrecision(3)).toLocaleString(),\n size_b: fileSize.toLocaleString(),\n });\n }\n\n async #parsePageSize(pageSizeInches, pagesRotation) {\n if (!pageSizeInches) {\n return undefined;\n }\n // Take the viewer rotation into account as well; compare with Adobe Reader.\n if (pagesRotation % 180 !== 0) {\n pageSizeInches = {\n width: pageSizeInches.height,\n height: pageSizeInches.width,\n };\n }\n const isPortrait = isPortraitOrientation(pageSizeInches);\n\n let sizeInches = {\n width: Math.round(pageSizeInches.width * 100) / 100,\n height: Math.round(pageSizeInches.height * 100) / 100,\n };\n // 1in == 25.4mm; no need to round to 2 decimals for millimeters.\n let sizeMillimeters = {\n width: Math.round(pageSizeInches.width * 25.4 * 10) / 10,\n height: Math.round(pageSizeInches.height * 25.4 * 10) / 10,\n };\n\n let rawName =\n getPageName(sizeInches, isPortrait, US_PAGE_NAMES) ||\n getPageName(sizeMillimeters, isPortrait, METRIC_PAGE_NAMES);\n\n if (\n !rawName &&\n !(\n Number.isInteger(sizeMillimeters.width) &&\n Number.isInteger(sizeMillimeters.height)\n )\n ) {\n // Attempt to improve the page name detection by falling back to fuzzy\n // matching of the metric dimensions, to account for e.g. rounding errors\n // and/or PDF files that define the page sizes in an imprecise manner.\n const exactMillimeters = {\n width: pageSizeInches.width * 25.4,\n height: pageSizeInches.height * 25.4,\n };\n const intMillimeters = {\n width: Math.round(sizeMillimeters.width),\n height: Math.round(sizeMillimeters.height),\n };\n\n // Try to avoid false positives, by only considering \"small\" differences.\n if (\n Math.abs(exactMillimeters.width - intMillimeters.width) < 0.1 &&\n Math.abs(exactMillimeters.height - intMillimeters.height) < 0.1\n ) {\n rawName = getPageName(intMillimeters, isPortrait, METRIC_PAGE_NAMES);\n if (rawName) {\n // Update *both* sizes, computed above, to ensure that the displayed\n // dimensions always correspond to the detected page name.\n sizeInches = {\n width: Math.round((intMillimeters.width / 25.4) * 100) / 100,\n height: Math.round((intMillimeters.height / 25.4) * 100) / 100,\n };\n sizeMillimeters = intMillimeters;\n }\n }\n }\n\n const [{ width, height }, unit, name, orientation] = await Promise.all([\n this._isNonMetricLocale ? sizeInches : sizeMillimeters,\n this.l10n.get(\n `pdfjs-document-properties-page-size-unit-${\n this._isNonMetricLocale ? \"inches\" : \"millimeters\"\n }`\n ),\n rawName &&\n this.l10n.get(`pdfjs-document-properties-page-size-name-${rawName}`),\n this.l10n.get(\n `pdfjs-document-properties-page-size-orientation-${\n isPortrait ? \"portrait\" : \"landscape\"\n }`\n ),\n ]);\n\n return this.l10n.get(\n `pdfjs-document-properties-page-size-dimension-${\n name ? \"name-\" : \"\"\n }string`,\n {\n width: width.toLocaleString(),\n height: height.toLocaleString(),\n unit,\n name,\n orientation,\n }\n );\n }\n\n async #parseDate(inputDate) {\n const dateObject = PDFDateString.toDateObject(inputDate);\n if (!dateObject) {\n return undefined;\n }\n return this.l10n.get(\"pdfjs-document-properties-date-string\", {\n date: dateObject.toLocaleDateString(),\n time: dateObject.toLocaleTimeString(),\n });\n }\n\n #parseLinearization(isLinearized) {\n return this.l10n.get(\n `pdfjs-document-properties-linearized-${isLinearized ? \"yes\" : \"no\"}`\n );\n }\n}\n\nexport { PDFDocumentProperties };\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 (\n (charCode >= /* a = */ 0x61 && charCode <= /* z = */ 0x7a) ||\n (charCode >= /* A = */ 0x41 && charCode <= /* Z = */ 0x5a)\n );\n}\n\nfunction isAsciiDigit(charCode) {\n return charCode >= /* 0 = */ 0x30 && charCode <= /* 9 = */ 0x39;\n}\n\nfunction isAsciiSpace(charCode) {\n return (\n charCode === /* SPACE = */ 0x20 ||\n charCode === /* TAB = */ 0x09 ||\n charCode === /* CR = */ 0x0d ||\n charCode === /* LF = */ 0x0a\n );\n}\n\nfunction isHan(charCode) {\n return (\n (charCode >= 0x3400 && charCode <= 0x9fff) ||\n (charCode >= 0xf900 && charCode <= 0xfaff)\n );\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 (\n isAsciiAlpha(charCode) ||\n isAsciiDigit(charCode) ||\n charCode === /* UNDERSCORE = */ 0x5f\n ) {\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\nlet NormalizeWithNFKC;\nfunction getNormalizeWithNFKC() {\n /* eslint-disable no-irregular-whitespace */\n NormalizeWithNFKC ||= ` ¨ª¯²-µ¸-º¼-¾IJ-ijĿ-ŀʼnſDŽ-njDZ-dzʰ-ʸ˘-˝ˠ-ˤʹͺ;΄-΅·ϐ-ϖϰ-ϲϴ-ϵϹևٵ-ٸक़-य़ড়-ঢ়য়ਲ਼ਸ਼ਖ਼-ਜ਼ਫ਼ଡ଼-ଢ଼ำຳໜ-ໝ༌གྷཌྷདྷབྷཛྷཀྵჼᴬ-ᴮᴰ-ᴺᴼ-ᵍᵏ-ᵪᵸᶛ-ᶿẚ-ẛάέήίόύώΆ᾽-῁ΈΉ῍-῏ΐΊ῝-῟ΰΎ῭-`ΌΏ´- - ‑‗․-… ″-‴‶-‷‼‾⁇-⁉⁗ ⁰-ⁱ⁴-₎ₐ-ₜ₨℀-℃℅-ℇ℉--№ℙ-ℝ℠-™ℤΩℨK---ℹ℻-⅀ⅅ-ⅉ⅐-ⅿ↉∬-∭∯-∰〈-〉①-⓪⨌⩴-⩶⫝̸ⱼ-ⱽⵯ⺟⻳⼀-⿕ 〶〸-〺゛-゜ゟヿㄱ-ㆎ㆒-㆟㈀-㈞㈠-㉇㉐-㉾㊀-㏿ꚜ-ꚝꝰꟲ-ꟴꟸ-ꟹꭜ-ꭟꭩ豈-嗀塚晴凞-羽蘒諸逸-都飯-舘並-龎ff-stﬓ-ﬗיִײַ-זּטּ-לּמּנּ-סּףּ-פּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-﷼︐-︙︰-﹄﹇-﹒﹔-﹦﹨-﹫ﹰ-ﹲﹴﹶ-ﻼ!-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ¢-₩`;\n\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n const ranges = [];\n const range = [];\n const diacriticsRegex = /^\\p{M}$/u;\n // Some chars must be replaced by their NFKC counterpart during a search.\n for (let i = 0; i < 65536; i++) {\n const c = String.fromCharCode(i);\n if (c.normalize(\"NFKC\") !== c && !diacriticsRegex.test(c)) {\n if (range.length !== 2) {\n range[0] = range[1] = i;\n continue;\n }\n if (range[1] + 1 !== i) {\n if (range[0] === range[1]) {\n ranges.push(String.fromCharCode(range[0]));\n } else {\n ranges.push(\n `${String.fromCharCode(range[0])}-${String.fromCharCode(\n range[1]\n )}`\n );\n }\n range[0] = range[1] = i;\n } else {\n range[1] = i;\n }\n }\n }\n if (ranges.join(\"\") !== NormalizeWithNFKC) {\n throw new Error(\n \"getNormalizeWithNFKC - update the `NormalizeWithNFKC` string.\"\n );\n }\n }\n return NormalizeWithNFKC;\n}\n\nexport { CharacterType, getCharacterType, getNormalizeWithNFKC };\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\n/** @typedef {import(\"../src/display/api\").PDFDocumentProxy} PDFDocumentProxy */\n/** @typedef {import(\"./event_utils\").EventBus} EventBus */\n/** @typedef {import(\"./interfaces\").IPDFLinkService} IPDFLinkService */\n\nimport { binarySearchFirstItem, scrollIntoView } from \"./ui_utils.js\";\nimport { getCharacterType, getNormalizeWithNFKC } from \"./pdf_find_utils.js\";\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 \"\\u2010\": \"-\", // Hyphen\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// These diacritics aren't considered as combining diacritics\n// when searching in a document:\n// https://searchfox.org/mozilla-central/source/intl/unicharutil/util/is_combining_diacritic.py.\n// The combining class definitions can be found:\n// https://www.unicode.org/reports/tr44/#Canonical_Combining_Class_Values\n// Category 0 corresponds to [^\\p{Mn}].\nconst DIACRITICS_EXCEPTION = new Set([\n // UNICODE_COMBINING_CLASS_KANA_VOICING\n // https://www.compart.com/fr/unicode/combining/8\n 0x3099, 0x309a,\n // UNICODE_COMBINING_CLASS_VIRAMA (under 0xFFFF)\n // https://www.compart.com/fr/unicode/combining/9\n 0x094d, 0x09cd, 0x0a4d, 0x0acd, 0x0b4d, 0x0bcd, 0x0c4d, 0x0ccd, 0x0d3b,\n 0x0d3c, 0x0d4d, 0x0dca, 0x0e3a, 0x0eba, 0x0f84, 0x1039, 0x103a, 0x1714,\n 0x1734, 0x17d2, 0x1a60, 0x1b44, 0x1baa, 0x1bab, 0x1bf2, 0x1bf3, 0x2d7f,\n 0xa806, 0xa82c, 0xa8c4, 0xa953, 0xa9c0, 0xaaf6, 0xabed,\n // 91\n // https://www.compart.com/fr/unicode/combining/91\n 0x0c56,\n // 129\n // https://www.compart.com/fr/unicode/combining/129\n 0x0f71,\n // 130\n // https://www.compart.com/fr/unicode/combining/130\n 0x0f72, 0x0f7a, 0x0f7b, 0x0f7c, 0x0f7d, 0x0f80,\n // 132\n // https://www.compart.com/fr/unicode/combining/132\n 0x0f74,\n]);\nlet DIACRITICS_EXCEPTION_STR; // Lazily initialized, see below.\n\nconst DIACRITICS_REG_EXP = /\\p{M}+/gu;\nconst SPECIAL_CHARS_REG_EXP =\n /([.*+?^${}()|[\\]\\\\])|(\\p{P})|(\\s+)|(\\p{M})|(\\p{L})/gu;\nconst NOT_DIACRITIC_FROM_END_REG_EXP = /([^\\p{M}])\\p{M}*$/u;\nconst NOT_DIACRITIC_FROM_START_REG_EXP = /^\\p{M}*([^\\p{M}])/u;\n\n// The range [AC00-D7AF] corresponds to the Hangul syllables.\n// The few other chars are some CJK Compatibility Ideographs.\nconst SYLLABLES_REG_EXP = /[\\uAC00-\\uD7AF\\uFA6C\\uFACF-\\uFAD1\\uFAD5-\\uFAD7]+/g;\nconst SYLLABLES_LENGTHS = new Map();\n// When decomposed (in using NFD) the above syllables will start\n// with one of the chars in this regexp.\nconst FIRST_CHAR_SYLLABLES_REG_EXP =\n \"[\\\\u1100-\\\\u1112\\\\ud7a4-\\\\ud7af\\\\ud84a\\\\ud84c\\\\ud850\\\\ud854\\\\ud857\\\\ud85f]\";\n\nconst NFKC_CHARS_TO_NORMALIZE = new Map();\n\nlet noSyllablesRegExp = null;\nlet withSyllablesRegExp = null;\n\nfunction normalize(text) {\n // The diacritics in the text or in the query can be composed or not.\n // So we use a decomposed text using NFD (and the same for the query)\n // in order to be sure that diacritics are in the same order.\n\n // Collect syllables length and positions.\n const syllablePositions = [];\n let m;\n while ((m = SYLLABLES_REG_EXP.exec(text)) !== null) {\n let { index } = m;\n for (const char of m[0]) {\n let len = SYLLABLES_LENGTHS.get(char);\n if (!len) {\n len = char.normalize(\"NFD\").length;\n SYLLABLES_LENGTHS.set(char, len);\n }\n syllablePositions.push([len, index++]);\n }\n }\n\n let normalizationRegex;\n if (syllablePositions.length === 0 && noSyllablesRegExp) {\n normalizationRegex = noSyllablesRegExp;\n } else if (syllablePositions.length > 0 && withSyllablesRegExp) {\n normalizationRegex = withSyllablesRegExp;\n } else {\n // Compile the regular expression for text normalization once.\n const replace = Object.keys(CHARACTERS_TO_NORMALIZE).join(\"\");\n const toNormalizeWithNFKC = getNormalizeWithNFKC();\n\n // 3040-309F: Hiragana\n // 30A0-30FF: Katakana\n const CJK = \"(?:\\\\p{Ideographic}|[\\u3040-\\u30FF])\";\n const HKDiacritics = \"(?:\\u3099|\\u309A)\";\n const regexp = `([${replace}])|([${toNormalizeWithNFKC}])|(${HKDiacritics}\\\\n)|(\\\\p{M}+(?:-\\\\n)?)|(\\\\S-\\\\n)|(${CJK}\\\\n)|(\\\\n)`;\n\n if (syllablePositions.length === 0) {\n // Most of the syllables belong to Hangul so there are no need\n // to search for them in a non-Hangul document.\n // We use the \\0 in order to have the same number of groups.\n normalizationRegex = noSyllablesRegExp = new RegExp(\n regexp + \"|(\\\\u0000)\",\n \"gum\"\n );\n } else {\n normalizationRegex = withSyllablesRegExp = new RegExp(\n regexp + `|(${FIRST_CHAR_SYLLABLES_REG_EXP})`,\n \"gum\"\n );\n }\n }\n\n // The goal of this function is to normalize the string and\n // be able to get from an index in the new string the\n // corresponding index in the old string.\n // For example if we have: abCd12ef456gh where C is replaced by ccc\n // and numbers replaced by nothing (it's the case for diacritics), then\n // we'll obtain the normalized string: abcccdefgh.\n // So here the reverse map is: [0,1,2,2,2,3,6,7,11,12].\n\n // The goal is to obtain the array: [[0, 0], [3, -1], [4, -2],\n // [6, 0], [8, 3]].\n // which can be used like this:\n // - let say that i is the index in new string and j the index\n // the old string.\n // - if i is in [0; 3[ then j = i + 0\n // - if i is in [3; 4[ then j = i - 1\n // - if i is in [4; 6[ then j = i - 2\n // ...\n // Thanks to a binary search it's easy to know where is i and what's the\n // shift.\n // Let say that the last entry in the array is [x, s] and we have a\n // substitution at index y (old string) which will replace o chars by n chars.\n // Firstly, if o === n, then no need to add a new entry: the shift is\n // the same.\n // Secondly, if o < n, then we push the n - o elements:\n // [y - (s - 1), s - 1], [y - (s - 2), s - 2], ...\n // Thirdly, if o > n, then we push the element: [y - (s - n), o + s - n]\n\n // Collect diacritics length and positions.\n const rawDiacriticsPositions = [];\n while ((m = DIACRITICS_REG_EXP.exec(text)) !== null) {\n rawDiacriticsPositions.push([m[0].length, m.index]);\n }\n\n let normalized = text.normalize(\"NFD\");\n const positions = [[0, 0]];\n let rawDiacriticsIndex = 0;\n let syllableIndex = 0;\n let shift = 0;\n let shiftOrigin = 0;\n let eol = 0;\n let hasDiacritics = false;\n\n normalized = normalized.replace(\n normalizationRegex,\n (match, p1, p2, p3, p4, p5, p6, p7, p8, i) => {\n i -= shiftOrigin;\n if (p1) {\n // Maybe fractions or quotations mark...\n const replacement = CHARACTERS_TO_NORMALIZE[p1];\n const jj = replacement.length;\n for (let j = 1; j < jj; j++) {\n positions.push([i - shift + j, shift - j]);\n }\n shift -= jj - 1;\n return replacement;\n }\n\n if (p2) {\n // Use the NFKC representation to normalize the char.\n let replacement = NFKC_CHARS_TO_NORMALIZE.get(p2);\n if (!replacement) {\n replacement = p2.normalize(\"NFKC\");\n NFKC_CHARS_TO_NORMALIZE.set(p2, replacement);\n }\n const jj = replacement.length;\n for (let j = 1; j < jj; j++) {\n positions.push([i - shift + j, shift - j]);\n }\n shift -= jj - 1;\n return replacement;\n }\n\n if (p3) {\n // We've a Katakana-Hiragana diacritic followed by a \\n so don't replace\n // the \\n by a whitespace.\n hasDiacritics = true;\n\n // Diacritic.\n if (i + eol === rawDiacriticsPositions[rawDiacriticsIndex]?.[1]) {\n ++rawDiacriticsIndex;\n } else {\n // i is the position of the first diacritic\n // so (i - 1) is the position for the letter before.\n positions.push([i - 1 - shift + 1, shift - 1]);\n shift -= 1;\n shiftOrigin += 1;\n }\n\n // End-of-line.\n positions.push([i - shift + 1, shift]);\n shiftOrigin += 1;\n eol += 1;\n\n return p3.charAt(0);\n }\n\n if (p4) {\n const hasTrailingDashEOL = p4.endsWith(\"\\n\");\n const len = hasTrailingDashEOL ? p4.length - 2 : p4.length;\n\n // Diacritics.\n hasDiacritics = true;\n let jj = len;\n if (i + eol === rawDiacriticsPositions[rawDiacriticsIndex]?.[1]) {\n jj -= rawDiacriticsPositions[rawDiacriticsIndex][0];\n ++rawDiacriticsIndex;\n }\n\n for (let j = 1; j <= jj; j++) {\n // i is the position of the first diacritic\n // so (i - 1) is the position for the letter before.\n positions.push([i - 1 - shift + j, shift - j]);\n }\n shift -= jj;\n shiftOrigin += jj;\n\n if (hasTrailingDashEOL) {\n // Diacritics are followed by a -\\n.\n // See comments in `if (p5)` block.\n i += len - 1;\n positions.push([i - shift + 1, 1 + shift]);\n shift += 1;\n shiftOrigin += 1;\n eol += 1;\n return p4.slice(0, len);\n }\n\n return p4;\n }\n\n if (p5) {\n // \"X-\\n\" is removed because an hyphen at the end of a line\n // with not a space before is likely here to mark a break\n // in a word.\n // If X is encoded with UTF-32 then it can have a length greater than 1.\n // The \\n isn't in the original text so here y = i, n = X.len - 2 and\n // o = X.len - 1.\n const len = p5.length - 2;\n positions.push([i - shift + len, 1 + shift]);\n shift += 1;\n shiftOrigin += 1;\n eol += 1;\n return p5.slice(0, -2);\n }\n\n if (p6) {\n // An ideographic at the end of a line doesn't imply adding an extra\n // white space.\n // A CJK can be encoded in UTF-32, hence their length isn't always 1.\n const len = p6.length - 1;\n positions.push([i - shift + len, shift]);\n shiftOrigin += 1;\n eol += 1;\n return p6.slice(0, -1);\n }\n\n if (p7) {\n // eol is replaced by space: \"foo\\nbar\" is likely equivalent to\n // \"foo bar\".\n positions.push([i - shift + 1, shift - 1]);\n shift -= 1;\n shiftOrigin += 1;\n eol += 1;\n return \" \";\n }\n\n // p8\n if (i + eol === syllablePositions[syllableIndex]?.[1]) {\n // A syllable (1 char) is replaced with several chars (n) so\n // newCharsLen = n - 1.\n const newCharLen = syllablePositions[syllableIndex][0] - 1;\n ++syllableIndex;\n for (let j = 1; j <= newCharLen; j++) {\n positions.push([i - (shift - j), shift - j]);\n }\n shift -= newCharLen;\n shiftOrigin += newCharLen;\n }\n return p8;\n }\n );\n\n positions.push([normalized.length, shift]);\n\n return [normalized, positions, hasDiacritics];\n}\n\n// Determine the original, non-normalized, match index such that highlighting of\n// search results is correct in the `textLayer` for strings containing e.g. \"½\"\n// characters; essentially \"inverting\" the result of the `normalize` function.\nfunction getOriginalIndex(diffs, pos, len) {\n if (!diffs) {\n return [pos, len];\n }\n\n // First char in the new string.\n const start = pos;\n // Last char in the new string.\n const end = pos + len - 1;\n let i = binarySearchFirstItem(diffs, x => x[0] >= start);\n if (diffs[i][0] > start) {\n --i;\n }\n\n let j = binarySearchFirstItem(diffs, x => x[0] >= end, i);\n if (diffs[j][0] > end) {\n --j;\n }\n\n // First char in the old string.\n const oldStart = start + diffs[i][1];\n\n // Last char in the old string.\n const oldEnd = end + diffs[j][1];\n const oldLen = oldEnd + 1 - oldStart;\n\n return [oldStart, oldLen];\n}\n\n/**\n * @typedef {Object} PDFFindControllerOptions\n * @property {IPDFLinkService} linkService - The navigation/linking service.\n * @property {EventBus} eventBus - The application event bus.\n * @property {boolean} [updateMatchesCountOnProgress] - True if the matches\n * count must be updated on progress or only when the last page is reached.\n * The default value is `true`.\n */\n\n/**\n * Provides search functionality to find a given string in a PDF document.\n */\nclass PDFFindController {\n #state = null;\n\n #updateMatchesCountOnProgress = true;\n\n #visitedPagesCount = 0;\n\n /**\n * @param {PDFFindControllerOptions} options\n */\n constructor({ linkService, eventBus, updateMatchesCountOnProgress = true }) {\n this._linkService = linkService;\n this._eventBus = eventBus;\n this.#updateMatchesCountOnProgress = updateMatchesCountOnProgress;\n\n /**\n * Callback used to check if a `pageNumber` is currently visible.\n * @type {function}\n */\n this.onIsPageVisible = null;\n\n this.#reset();\n eventBus._on(\"find\", this.#onFind.bind(this));\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 #onFind(state) {\n if (!state) {\n return;\n }\n const pdfDocument = this._pdfDocument;\n const { type } = state;\n\n if (this.#state === null || this.#shouldDirtyMatch(state)) {\n this._dirtyMatch = true;\n }\n this.#state = state;\n if (type !== \"highlightallchange\") {\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 (\n !this._pdfDocument ||\n (pdfDocument && this._pdfDocument !== pdfDocument)\n ) {\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 (!type) {\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 (type === \"again\") {\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 (type === \"highlightallchange\") {\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 /**\n * @typedef {Object} PDFFindControllerScrollMatchIntoViewParams\n * @property {HTMLElement} element\n * @property {number} selectedLeft\n * @property {number} pageIndex\n * @property {number} matchIndex\n */\n\n /**\n * Scroll the current match into view.\n * @param {PDFFindControllerScrollMatchIntoViewParams}\n */\n scrollMatchIntoView({\n element = null,\n selectedLeft = 0,\n pageIndex = -1,\n matchIndex = -1,\n }) {\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: selectedLeft + MATCH_SCROLL_OFFSET_LEFT,\n };\n scrollIntoView(element, spot, /* scrollMatches = */ 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.#visitedPagesCount = 0;\n this.#state = null;\n // Currently selected match.\n this._selected = {\n pageIdx: -1,\n matchIdx: -1,\n };\n // Where the find algorithm currently is in the document.\n this._offset = {\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._pageDiffs = [];\n this._hasDiacritics = [];\n this._matchesCountTotal = 0;\n this._pagesToSearch = null;\n this._pendingFindMatches = new Set();\n this._resumePageIdx = null;\n this._dirtyMatch = false;\n clearTimeout(this._findTimeout);\n this._findTimeout = null;\n\n this._firstPageCapability = Promise.withResolvers();\n }\n\n /**\n * @type {string|Array} The (current) normalized search query.\n */\n get #query() {\n const { query } = this.#state;\n if (typeof query === \"string\") {\n if (query !== this._rawQuery) {\n this._rawQuery = query;\n [this._normalizedQuery] = normalize(query);\n }\n return this._normalizedQuery;\n }\n // We don't bother caching the normalized search query in the Array-case,\n // since this code-path is *essentially* unused in the default viewer.\n return (query || []).filter(q => !!q).map(q => normalize(q)[0]);\n }\n\n #shouldDirtyMatch(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 const newQuery = state.query,\n prevQuery = this.#state.query;\n const newType = typeof newQuery,\n prevType = typeof prevQuery;\n\n if (newType !== prevType) {\n return true;\n }\n if (newType === \"string\") {\n if (newQuery !== prevQuery) {\n return true;\n }\n } else if (\n /* isArray && */ JSON.stringify(newQuery) !== JSON.stringify(prevQuery)\n ) {\n return true;\n }\n\n switch (state.type) {\n case \"again\":\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 return (\n pageNumber >= 1 &&\n pageNumber <= linkService.pagesCount &&\n pageNumber !== linkService.page &&\n !(this.onIsPageVisible?.(pageNumber) ?? true)\n );\n case \"highlightallchange\":\n return false;\n }\n return true;\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 let match = content\n .slice(0, startIdx)\n .match(NOT_DIACRITIC_FROM_END_REG_EXP);\n if (match) {\n const first = content.charCodeAt(startIdx);\n const limit = match[1].charCodeAt(0);\n if (getCharacterType(first) === getCharacterType(limit)) {\n return false;\n }\n }\n\n match = content\n .slice(startIdx + length)\n .match(NOT_DIACRITIC_FROM_START_REG_EXP);\n if (match) {\n const last = content.charCodeAt(startIdx + length - 1);\n const limit = match[1].charCodeAt(0);\n if (getCharacterType(last) === getCharacterType(limit)) {\n return false;\n }\n }\n\n return true;\n }\n\n #calculateRegExpMatch(query, entireWord, pageIndex, pageContent) {\n const matches = (this._pageMatches[pageIndex] = []);\n const matchesLength = (this._pageMatchesLength[pageIndex] = []);\n if (!query) {\n // The query can be empty because some chars like diacritics could have\n // been stripped out.\n return;\n }\n const diffs = this._pageDiffs[pageIndex];\n let match;\n while ((match = query.exec(pageContent)) !== null) {\n if (\n entireWord &&\n !this.#isEntireWord(pageContent, match.index, match[0].length)\n ) {\n continue;\n }\n\n const [matchPos, matchLen] = getOriginalIndex(\n diffs,\n match.index,\n match[0].length\n );\n\n if (matchLen) {\n matches.push(matchPos);\n matchesLength.push(matchLen);\n }\n }\n }\n\n #convertToRegExpString(query, hasDiacritics) {\n const { matchDiacritics } = this.#state;\n let isUnicode = false;\n query = query.replaceAll(\n SPECIAL_CHARS_REG_EXP,\n (\n match,\n p1 /* to escape */,\n p2 /* punctuation */,\n p3 /* whitespaces */,\n p4 /* diacritics */,\n p5 /* letters */\n ) => {\n // We don't need to use a \\s for whitespaces since all the different\n // kind of whitespaces are replaced by a single \" \".\n\n if (p1) {\n // Escape characters like *+?... to not interfer with regexp syntax.\n return `[ ]*\\\\${p1}[ ]*`;\n }\n if (p2) {\n // Allow whitespaces around punctuation signs.\n return `[ ]*${p2}[ ]*`;\n }\n if (p3) {\n // Replace spaces by \\s+ to be sure to match any spaces.\n return \"[ ]+\";\n }\n if (matchDiacritics) {\n return p4 || p5;\n }\n\n if (p4) {\n // Diacritics are removed with few exceptions.\n return DIACRITICS_EXCEPTION.has(p4.charCodeAt(0)) ? p4 : \"\";\n }\n\n // A letter has been matched and it can be followed by any diacritics\n // in normalized text.\n if (hasDiacritics) {\n isUnicode = true;\n return `${p5}\\\\p{M}*`;\n }\n return p5;\n }\n );\n\n const trailingSpaces = \"[ ]*\";\n if (query.endsWith(trailingSpaces)) {\n // The [ ]* has been added in order to help to match \"foo . bar\" but\n // it doesn't make sense to match some whitespaces after the dot\n // when it's the last character.\n query = query.slice(0, query.length - trailingSpaces.length);\n }\n\n if (matchDiacritics) {\n // aX must not match aXY.\n if (hasDiacritics) {\n DIACRITICS_EXCEPTION_STR ||= String.fromCharCode(\n ...DIACRITICS_EXCEPTION\n );\n\n isUnicode = true;\n query = `${query}(?=[${DIACRITICS_EXCEPTION_STR}]|[^\\\\p{M}]|$)`;\n }\n }\n\n return [isUnicode, query];\n }\n\n #calculateMatch(pageIndex) {\n let query = this.#query;\n if (query.length === 0) {\n return; // Do nothing: the matches should be wiped out already.\n }\n const { caseSensitive, entireWord } = this.#state;\n const pageContent = this._pageContents[pageIndex];\n const hasDiacritics = this._hasDiacritics[pageIndex];\n\n let isUnicode = false;\n if (typeof query === \"string\") {\n [isUnicode, query] = this.#convertToRegExpString(query, hasDiacritics);\n } else {\n // Words are sorted in reverse order to be sure that \"foobar\" is matched\n // before \"foo\" in case the query is \"foobar foo\".\n query = query\n .sort()\n .reverse()\n .map(q => {\n const [isUnicodePart, queryPart] = this.#convertToRegExpString(\n q,\n hasDiacritics\n );\n isUnicode ||= isUnicodePart;\n return `(${queryPart})`;\n })\n .join(\"|\");\n }\n\n const flags = `g${isUnicode ? \"u\" : \"\"}${caseSensitive ? \"\" : \"i\"}`;\n query = query ? new RegExp(query, flags) : null;\n\n this.#calculateRegExpMatch(query, entireWord, pageIndex, pageContent);\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 this._matchesCountTotal += pageMatchesCount;\n if (this.#updateMatchesCountOnProgress) {\n if (pageMatchesCount > 0) {\n this.#updateUIResultsCount();\n }\n } else if (++this.#visitedPagesCount === this._linkService.pagesCount) {\n // For example, in GeckoView we want to have only the final update because\n // the Java side provides only one object to update the counts.\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 deferred = Promise.resolve();\n const textOptions = { disableNormalization: true };\n for (let i = 0, ii = this._linkService.pagesCount; i < ii; i++) {\n const { promise, resolve } = Promise.withResolvers();\n this._extractTextPromises[i] = promise;\n\n // eslint-disable-next-line arrow-body-style\n deferred = deferred.then(() => {\n return this._pdfDocument\n .getPage(i + 1)\n .then(pdfPage => pdfPage.getTextContent(textOptions))\n .then(\n textContent => {\n const strBuf = [];\n\n for (const textItem of textContent.items) {\n strBuf.push(textItem.str);\n if (textItem.hasEOL) {\n strBuf.push(\"\\n\");\n }\n }\n\n // Store the normalized page content (text items) as one string.\n [\n this._pageContents[i],\n this._pageDiffs[i],\n this._hasDiacritics[i],\n ] = normalize(strBuf.join(\"\"));\n resolve();\n },\n reason => {\n console.error(\n `Unable to get text content for page ${i + 1}`,\n reason\n );\n // Page error -- assuming no text content.\n this._pageContents[i] = \"\";\n this._pageDiffs[i] = null;\n this._hasDiacritics[i] = false;\n resolve();\n }\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.#visitedPagesCount = 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.has(i)) {\n continue;\n }\n this._pendingFindMatches.add(i);\n this._extractTextPromises[i].then(() => {\n this._pendingFindMatches.delete(i);\n this.#calculateMatch(i);\n });\n }\n }\n\n // If there's no query there's no point in searching.\n const query = this.#query;\n if (query.length === 0) {\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 (\n (!previous && offset.matchIdx + 1 < numPageMatches) ||\n (previous && offset.matchIdx > 0)\n ) {\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 : 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 (\n !this._pdfDocument ||\n (pdfDocument && this._pdfDocument !== pdfDocument)\n ) {\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,\n total = this._matchesCountTotal;\n if (matchIdx !== -1) {\n for (let i = 0; i < pageIdx; i++) {\n current += 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 = false) {\n if (\n !this.#updateMatchesCountOnProgress &&\n (this.#visitedPagesCount !== this._linkService.pagesCount ||\n state === FindState.PENDING)\n ) {\n // When this.#updateMatchesCountOnProgress is false we only send an update\n // when everything is ready.\n return;\n }\n\n this._eventBus.dispatch(\"updatefindcontrolstate\", {\n source: this,\n state,\n previous,\n matchesCount: this.#requestMatchesCount(),\n rawQuery: this.#state?.query ?? null,\n });\n }\n}\n\nexport { FindState, PDFFindController };\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 { FindState } from \"./pdf_find_controller.js\";\nimport { toggleExpandedBtn } from \"./ui_utils.js\";\n\nconst MATCHES_COUNT_LIMIT = 1000;\n\n/**\n * Creates a \"search bar\" given a set of DOM elements that act as controls\n * for searching or for setting search preferences in the UI. This object\n * also sets up the appropriate events for the controls. Actual searching\n * is done by PDFFindController.\n */\nclass PDFFindBar {\n #resizeObserver = new ResizeObserver(this.#resizeObserverCallback.bind(this));\n\n constructor(options, eventBus) {\n this.opened = false;\n\n this.bar = options.bar;\n this.toggleButton = options.toggleButton;\n this.findField = options.findField;\n this.highlightAll = options.highlightAllCheckbox;\n this.caseSensitive = options.caseSensitiveCheckbox;\n this.matchDiacritics = options.matchDiacriticsCheckbox;\n this.entireWord = options.entireWordCheckbox;\n this.findMsg = options.findMsg;\n this.findResultsCount = options.findResultsCount;\n this.findPreviousButton = options.findPreviousButton;\n this.findNextButton = options.findNextButton;\n this.eventBus = eventBus;\n\n // Add event listeners to the DOM elements.\n this.toggleButton.addEventListener(\"click\", () => {\n this.toggle();\n });\n\n this.findField.addEventListener(\"input\", () => {\n this.dispatchEvent(\"\");\n });\n\n this.bar.addEventListener(\"keydown\", e => {\n switch (e.keyCode) {\n case 13: // Enter\n if (e.target === this.findField) {\n this.dispatchEvent(\"again\", e.shiftKey);\n }\n break;\n case 27: // Escape\n this.close();\n break;\n }\n });\n\n this.findPreviousButton.addEventListener(\"click\", () => {\n this.dispatchEvent(\"again\", true);\n });\n\n this.findNextButton.addEventListener(\"click\", () => {\n this.dispatchEvent(\"again\", false);\n });\n\n this.highlightAll.addEventListener(\"click\", () => {\n this.dispatchEvent(\"highlightallchange\");\n });\n\n this.caseSensitive.addEventListener(\"click\", () => {\n this.dispatchEvent(\"casesensitivitychange\");\n });\n\n this.entireWord.addEventListener(\"click\", () => {\n this.dispatchEvent(\"entirewordchange\");\n });\n\n this.matchDiacritics.addEventListener(\"click\", () => {\n this.dispatchEvent(\"diacriticmatchingchange\");\n });\n }\n\n reset() {\n this.updateUIState();\n }\n\n dispatchEvent(type, findPrev = false) {\n this.eventBus.dispatch(\"find\", {\n source: this,\n type,\n query: this.findField.value,\n caseSensitive: this.caseSensitive.checked,\n entireWord: this.entireWord.checked,\n highlightAll: this.highlightAll.checked,\n findPrevious: findPrev,\n matchDiacritics: this.matchDiacritics.checked,\n });\n }\n\n updateUIState(state, previous, matchesCount) {\n const { findField, findMsg } = this;\n let findMsgId = \"\",\n status = \"\";\n\n switch (state) {\n case FindState.FOUND:\n break;\n case FindState.PENDING:\n status = \"pending\";\n break;\n case FindState.NOT_FOUND:\n findMsgId = \"pdfjs-find-not-found\";\n status = \"notFound\";\n break;\n case FindState.WRAPPED:\n findMsgId = `pdfjs-find-reached-${previous ? \"top\" : \"bottom\"}`;\n break;\n }\n findField.setAttribute(\"data-status\", status);\n findField.setAttribute(\"aria-invalid\", state === FindState.NOT_FOUND);\n\n findMsg.setAttribute(\"data-status\", status);\n if (findMsgId) {\n findMsg.setAttribute(\"data-l10n-id\", findMsgId);\n } else {\n findMsg.removeAttribute(\"data-l10n-id\");\n findMsg.textContent = \"\";\n }\n\n this.updateResultsCount(matchesCount);\n }\n\n updateResultsCount({ current = 0, total = 0 } = {}) {\n const { findResultsCount } = this;\n\n if (total > 0) {\n const limit = MATCHES_COUNT_LIMIT;\n\n findResultsCount.setAttribute(\n \"data-l10n-id\",\n `pdfjs-find-match-count${total > limit ? \"-limit\" : \"\"}`\n );\n findResultsCount.setAttribute(\n \"data-l10n-args\",\n JSON.stringify({ limit, current, total })\n );\n } else {\n findResultsCount.removeAttribute(\"data-l10n-id\");\n findResultsCount.textContent = \"\";\n }\n }\n\n open() {\n if (!this.opened) {\n // Potentially update the findbar layout, row vs column, when:\n // - The width of the viewer itself changes.\n // - The width of the findbar changes, by toggling the visibility\n // (or localization) of find count/status messages.\n this.#resizeObserver.observe(this.bar.parentNode);\n this.#resizeObserver.observe(this.bar);\n\n this.opened = true;\n toggleExpandedBtn(this.toggleButton, true, this.bar);\n }\n this.findField.select();\n this.findField.focus();\n }\n\n close() {\n if (!this.opened) {\n return;\n }\n this.#resizeObserver.disconnect();\n\n this.opened = false;\n toggleExpandedBtn(this.toggleButton, false, this.bar);\n\n this.eventBus.dispatch(\"findbarclose\", { source: this });\n }\n\n toggle() {\n if (this.opened) {\n this.close();\n } else {\n this.open();\n }\n }\n\n #resizeObserverCallback(entries) {\n const { bar } = this;\n // The find bar has an absolute position and thus the browser extends\n // its width to the maximum possible width once the find bar does not fit\n // entirely within the window anymore (and its elements are automatically\n // wrapped). Here we detect and fix that.\n bar.classList.remove(\"wrapContainers\");\n\n const findbarHeight = bar.clientHeight;\n const inputContainerHeight = bar.firstElementChild.clientHeight;\n\n if (findbarHeight > inputContainerHeight) {\n // The findbar is taller than the input container, which means that\n // the browser wrapped some of the elements. For a consistent look,\n // wrap all of them to adjust the width of the find bar.\n bar.classList.add(\"wrapContainers\");\n }\n }\n}\n\nexport { PDFFindBar };\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\n/** @typedef {import(\"./event_utils\").EventBus} EventBus */\n/** @typedef {import(\"./interfaces\").IPDFLinkService} IPDFLinkService */\n\nimport { isValidRotation, parseQueryString } from \"./ui_utils.js\";\nimport { waitOnEventOrTimeout } from \"./event_utils.js\";\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] - Reset the browsing history.\n * @property {boolean} [updateUrl] - Attempt to update the document URL, with\n * the current hash, when pushing/replacing browser history entries.\n */\n\n/**\n * @typedef {Object} PushParameters\n * @property {string} [namedDest] - The named destination. If absent, a\n * 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\nclass PDFHistory {\n #eventAbortController = null;\n\n /**\n * @param {PDFHistoryOptions} options\n */\n constructor({ linkService, eventBus }) {\n this.linkService = linkService;\n this.eventBus = eventBus;\n\n this._initialized = false;\n this._fingerprint = \"\";\n this.reset();\n\n // Ensure that we don't miss a \"pagesinit\" event,\n // by registering the listener immediately.\n this.eventBus._on(\"pagesinit\", () => {\n this._isPagesLoaded = false;\n\n this.eventBus._on(\n \"pagesloaded\",\n evt => {\n this._isPagesLoaded = !!evt.pagesCount;\n },\n { once: true }\n );\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 );\n return;\n }\n // Ensure that any old state is always reset upon initialization.\n if (this._initialized) {\n this.reset();\n }\n const reInitialized =\n this._fingerprint !== \"\" && this._fingerprint !== fingerprint;\n this._fingerprint = fingerprint;\n this._updateUrl = updateUrl === true;\n\n this._initialized = true;\n this.#bindEvents();\n const state = window.history.state;\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 const { hash, page, rotation } = this.#parseCurrentHash(\n /* checkNameddest = */ true\n );\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(\n { hash, page, rotation },\n /* forceReplace = */ true\n );\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 const destination = state.destination;\n this.#updateInternalState(\n destination,\n state.uid,\n /* removeTemporary = */ true\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 * Reset the current `PDFHistory` instance, and consequently prevent any\n * further updates and/or navigation of the browser history.\n */\n reset() {\n if (this._initialized) {\n this.#pageHide(); // Simulate a 'pagehide' event when resetting.\n\n this._initialized = false;\n this.#unbindEvents();\n }\n if (this._updateViewareaTimeout) {\n clearTimeout(this._updateViewareaTimeout);\n this._updateViewareaTimeout = null;\n }\n this._initialBookmark = null;\n this._initialRotation = null;\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(\n \"PDFHistory.push: \" +\n `\"${namedDest}\" is not a valid namedDest parameter.`\n );\n return;\n } else if (!Array.isArray(explicitDest)) {\n console.error(\n \"PDFHistory.push: \" +\n `\"${explicitDest}\" is not a valid explicitDest parameter.`\n );\n return;\n } else if (!this.#isValidPage(pageNumber)) {\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(\n \"PDFHistory.push: \" +\n `\"${pageNumber}\" is not a valid pageNumber parameter.`\n );\n return;\n }\n }\n\n const 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 (\n this._destination &&\n (isDestHashesEqual(this._destination.hash, hash) ||\n isDestArraysEqual(this._destination.dest, explicitDest))\n ) {\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 {\n dest: explicitDest,\n hash,\n page: pageNumber,\n rotation: this.linkService.rotation,\n },\n forceReplace\n );\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 occurring when the new destination is being navigated to.\n Promise.resolve().then(() => {\n this._popStateInProgress = false;\n });\n }\n }\n\n /**\n * Push a page to the browser history; generally the `push` method should be\n * used instead.\n * @param {number} pageNumber\n */\n pushPage(pageNumber) {\n if (!this._initialized) {\n return;\n }\n if (!this.#isValidPage(pageNumber)) {\n console.error(\n `PDFHistory.pushPage: \"${pageNumber}\" is not a valid page number.`\n );\n return;\n }\n\n if (this._destination?.page === pageNumber) {\n // When the new page is identical to the one in `this._destination`, we\n // don't want to add a potential duplicate entry in the browser history.\n return;\n }\n if (this._popStateInProgress) {\n return;\n }\n\n this.#pushOrReplaceState({\n // Simulate an internal destination, for `this.#tryPushCurrentPosition`:\n dest: null,\n hash: `page=${pageNumber}`,\n page: pageNumber,\n rotation: this.linkService.rotation,\n });\n\n if (!this._popStateInProgress) {\n // Prevent the browser history from updating while the new page 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 occurring when the new page 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 const 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 const state = window.history.state;\n if (this.#isValidState(state) && state.uid < this._maxUid) {\n window.history.forward();\n }\n }\n\n /**\n * @type {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 (\n this._initialized &&\n (this._popStateInProgress || this._blockHashChange > 0)\n );\n }\n\n get initialBookmark() {\n return this._initialized ? this._initialBookmark : null;\n }\n\n get initialRotation() {\n return this._initialized ? this._initialRotation : null;\n }\n\n #pushOrReplaceState(destination, forceReplace = false) {\n const shouldReplace = forceReplace || !this._destination;\n const newState = {\n fingerprint: this._fingerprint,\n uid: shouldReplace ? this._uid : this._uid + 1,\n destination,\n };\n\n if (\n typeof PDFJSDev !== \"undefined\" &&\n PDFJSDev.test(\"CHROME\") &&\n window.history.state?.chromecomState\n ) {\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?.hash) {\n const baseUrl = document.location.href.split(\"#\", 1)[0];\n // Prevent errors in Firefox.\n if (!baseUrl.startsWith(\"file://\")) {\n newUrl = `${baseUrl}#${destination.hash}`;\n }\n }\n if (shouldReplace) {\n window.history.replaceState(newState, \"\", newUrl);\n } else {\n window.history.pushState(newState, \"\", newUrl);\n }\n\n if (\n typeof PDFJSDev !== \"undefined\" &&\n PDFJSDev.test(\"CHROME\") &&\n top === window\n ) {\n // eslint-disable-next-line no-undef\n chrome.runtime.sendMessage(\"showPageAction\");\n }\n }\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 (\n !this._destination.page &&\n (POSITION_UPDATED_THRESHOLD <= 0 ||\n this._numPositionUpdates <= POSITION_UPDATED_THRESHOLD)\n ) {\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 (\n this._destination.page >= position.first &&\n this._destination.page <= position.page\n ) {\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 !== undefined || !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 #isValidPage(val) {\n return (\n Number.isInteger(val) && val > 0 && val <= this.linkService.pagesCount\n );\n }\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 (\n typeof state.fingerprint !== \"string\" ||\n state.fingerprint.length !== this._fingerprint.length\n ) {\n return false;\n }\n const [perfEntry] = performance.getEntriesByType(\"navigation\");\n if (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 #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?.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._maxUid = Math.max(this._maxUid, uid);\n // This should always be reset when `this._destination` is updated.\n this._numPositionUpdates = 0;\n }\n\n #parseCurrentHash(checkNameddest = false) {\n const hash = unescape(getCurrentHash()).substring(1);\n const params = parseQueryString(hash);\n\n const nameddest = params.get(\"nameddest\") || \"\";\n let page = params.get(\"page\") | 0;\n\n if (!this.#isValidPage(page) || (checkNameddest && nameddest.length > 0)) {\n page = null;\n }\n return { hash, page, rotation: this.linkService.rotation };\n }\n\n #updateViewarea({ location }) {\n if (this._updateViewareaTimeout) {\n clearTimeout(this._updateViewareaTimeout);\n this._updateViewareaTimeout = null;\n }\n\n this._position = {\n hash: 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 (\n POSITION_UPDATED_THRESHOLD > 0 &&\n this._isPagesLoaded &&\n this._destination &&\n !this._destination.page\n ) {\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 #popState({ state }) {\n const newHash = getCurrentHash(),\n hashChanged = this._currentHash !== newHash;\n this._currentHash = newHash;\n\n if (\n (typeof PDFJSDev !== \"undefined\" &&\n PDFJSDev.test(\"CHROME\") &&\n state?.chromecomState &&\n !this.#isValidState(state)) ||\n !state\n ) {\n // This case corresponds to the user changing the hash of the document.\n this._uid++;\n\n const { hash, page, rotation } = this.#parseCurrentHash();\n this.#pushOrReplaceState(\n { hash, page, rotation },\n /* forceReplace = */ true\n );\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 const destination = state.destination;\n this.#updateInternalState(\n destination,\n state.uid,\n /* removeTemporary = */ true\n );\n\n if (isValidRotation(destination.rotation)) {\n this.linkService.rotation = destination.rotation;\n }\n if (destination.dest) {\n this.linkService.goToDestination(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.goToDestination` is asynchronous, we thus defer the\n // resetting of `this._popStateInProgress` slightly.\n Promise.resolve().then(() => {\n this._popStateInProgress = false;\n });\n }\n\n #pageHide() {\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 #bindEvents() {\n if (this.#eventAbortController) {\n return; // The event listeners were already added.\n }\n this.#eventAbortController = new AbortController();\n const { signal } = this.#eventAbortController;\n\n this.eventBus._on(\"updateviewarea\", this.#updateViewarea.bind(this), {\n signal,\n });\n window.addEventListener(\"popstate\", this.#popState.bind(this), { signal });\n window.addEventListener(\"pagehide\", this.#pageHide.bind(this), { signal });\n }\n\n #unbindEvents() {\n this.#eventAbortController?.abort();\n this.#eventAbortController = null;\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 const nameddest = parseQueryString(destHash).get(\"nameddest\");\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 (const 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 { isDestArraysEqual, isDestHashesEqual, PDFHistory };\n","/* Copyright 2020 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\n/** @typedef {import(\"./event_utils.js\").EventBus} EventBus */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"../src/optional_content_config.js\").OptionalContentConfig} OptionalContentConfig */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"../src/display/api.js\").PDFDocumentProxy} PDFDocumentProxy */\n\nimport { BaseTreeViewer } from \"./base_tree_viewer.js\";\n\n/**\n * @typedef {Object} PDFLayerViewerOptions\n * @property {HTMLDivElement} container - The viewer element.\n * @property {EventBus} eventBus - The application event bus.\n */\n\n/**\n * @typedef {Object} PDFLayerViewerRenderParameters\n * @property {OptionalContentConfig|null} optionalContentConfig - An\n * {OptionalContentConfig} instance.\n * @property {PDFDocumentProxy} pdfDocument - A {PDFDocument} instance.\n */\n\nclass PDFLayerViewer extends BaseTreeViewer {\n constructor(options) {\n super(options);\n\n this.eventBus._on(\"optionalcontentconfigchanged\", evt => {\n this.#updateLayers(evt.promise);\n });\n this.eventBus._on(\"resetlayers\", () => {\n this.#updateLayers();\n });\n this.eventBus._on(\"togglelayerstree\", this._toggleAllTreeItems.bind(this));\n }\n\n reset() {\n super.reset();\n this._optionalContentConfig = null;\n this._optionalContentHash = null;\n }\n\n /**\n * @protected\n */\n _dispatchEvent(layersCount) {\n this.eventBus.dispatch(\"layersloaded\", {\n source: this,\n layersCount,\n });\n }\n\n /**\n * @protected\n */\n _bindLink(element, { groupId, input }) {\n const setVisibility = () => {\n this._optionalContentConfig.setVisibility(groupId, input.checked);\n this._optionalContentHash = this._optionalContentConfig.getHash();\n\n this.eventBus.dispatch(\"optionalcontentconfig\", {\n source: this,\n promise: Promise.resolve(this._optionalContentConfig),\n });\n };\n\n element.onclick = evt => {\n if (evt.target === input) {\n setVisibility();\n return true;\n } else if (evt.target !== element) {\n return true; // The target is the \"label\", which is handled above.\n }\n input.checked = !input.checked;\n setVisibility();\n return false;\n };\n }\n\n /**\n * @private\n */\n async _setNestedName(element, { name = null }) {\n if (typeof name === \"string\") {\n element.textContent = this._normalizeTextContent(name);\n return;\n }\n element.textContent = await this._l10n.get(\"pdfjs-additional-layers\");\n element.style.fontStyle = \"italic\";\n }\n\n /**\n * @protected\n */\n _addToggleButton(div, { name = null }) {\n super._addToggleButton(div, /* hidden = */ name === null);\n }\n\n /**\n * @private\n */\n _toggleAllTreeItems() {\n if (!this._optionalContentConfig) {\n return;\n }\n super._toggleAllTreeItems();\n }\n\n /**\n * @param {PDFLayerViewerRenderParameters} params\n */\n render({ optionalContentConfig, pdfDocument }) {\n if (this._optionalContentConfig) {\n this.reset();\n }\n this._optionalContentConfig = optionalContentConfig || null;\n this._pdfDocument = pdfDocument || null;\n\n const groups = optionalContentConfig?.getOrder();\n if (!groups) {\n this._dispatchEvent(/* layersCount = */ 0);\n return;\n }\n this._optionalContentHash = optionalContentConfig.getHash();\n\n const fragment = document.createDocumentFragment(),\n queue = [{ parent: fragment, groups }];\n let layersCount = 0,\n hasAnyNesting = false;\n while (queue.length > 0) {\n const levelData = queue.shift();\n for (const groupId of levelData.groups) {\n const div = document.createElement(\"div\");\n div.className = \"treeItem\";\n\n const element = document.createElement(\"a\");\n div.append(element);\n\n if (typeof groupId === \"object\") {\n hasAnyNesting = true;\n this._addToggleButton(div, groupId);\n this._setNestedName(element, groupId);\n\n const itemsDiv = document.createElement(\"div\");\n itemsDiv.className = \"treeItems\";\n div.append(itemsDiv);\n\n queue.push({ parent: itemsDiv, groups: groupId.order });\n } else {\n const group = optionalContentConfig.getGroup(groupId);\n\n const input = document.createElement(\"input\");\n this._bindLink(element, { groupId, input });\n input.type = \"checkbox\";\n input.checked = group.visible;\n\n const label = document.createElement(\"label\");\n label.textContent = this._normalizeTextContent(group.name);\n\n label.append(input);\n element.append(label);\n layersCount++;\n }\n\n levelData.parent.append(div);\n }\n }\n\n this._finishRendering(fragment, layersCount, hasAnyNesting);\n }\n\n async #updateLayers(promise = null) {\n if (!this._optionalContentConfig) {\n return;\n }\n const pdfDocument = this._pdfDocument;\n const optionalContentConfig = await (promise ||\n pdfDocument.getOptionalContentConfig({ intent: \"display\" }));\n\n if (pdfDocument !== this._pdfDocument) {\n return; // The document was closed while the optional content resolved.\n }\n if (promise) {\n if (optionalContentConfig.getHash() === this._optionalContentHash) {\n return; // The optional content didn't change, hence no need to reset the UI.\n }\n } else {\n this.eventBus.dispatch(\"optionalcontentconfig\", {\n source: this,\n promise: Promise.resolve(optionalContentConfig),\n });\n }\n\n // Reset the sidebarView to the new state.\n this.render({\n optionalContentConfig,\n pdfDocument: this._pdfDocument,\n });\n }\n}\n\nexport { PDFLayerViewer };\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\n/** @typedef {import(\"./event_utils.js\").EventBus} EventBus */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"./download_manager.js\").DownloadManager} DownloadManager */\n/** @typedef {import(\"./interfaces.js\").IPDFLinkService} IPDFLinkService */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"../src/display/api.js\").PDFDocumentProxy} PDFDocumentProxy */\n\nimport { BaseTreeViewer } from \"./base_tree_viewer.js\";\nimport { SidebarView } from \"./ui_utils.js\";\n\n/**\n * @typedef {Object} PDFOutlineViewerOptions\n * @property {HTMLDivElement} container - The viewer element.\n * @property {EventBus} eventBus - The application event bus.\n * @property {IPDFLinkService} linkService - The navigation/linking service.\n * @property {DownloadManager} downloadManager - The download manager.\n */\n\n/**\n * @typedef {Object} PDFOutlineViewerRenderParameters\n * @property {Array|null} outline - An array of outline objects.\n * @property {PDFDocumentProxy} pdfDocument - A {PDFDocument} instance.\n */\n\nclass PDFOutlineViewer extends BaseTreeViewer {\n /**\n * @param {PDFOutlineViewerOptions} options\n */\n constructor(options) {\n super(options);\n this.linkService = options.linkService;\n this.downloadManager = options.downloadManager;\n\n this.eventBus._on(\"toggleoutlinetree\", this._toggleAllTreeItems.bind(this));\n this.eventBus._on(\n \"currentoutlineitem\",\n this._currentOutlineItem.bind(this)\n );\n\n this.eventBus._on(\"pagechanging\", evt => {\n this._currentPageNumber = evt.pageNumber;\n });\n this.eventBus._on(\"pagesloaded\", evt => {\n this._isPagesLoaded = !!evt.pagesCount;\n\n // If the capability is still pending, see the `_dispatchEvent`-method,\n // we know that the `currentOutlineItem`-button can be enabled here.\n this._currentOutlineItemCapability?.resolve(\n /* enabled = */ this._isPagesLoaded\n );\n });\n this.eventBus._on(\"sidebarviewchanged\", evt => {\n this._sidebarView = evt.view;\n });\n }\n\n reset() {\n super.reset();\n this._outline = null;\n\n this._pageNumberToDestHashCapability = null;\n this._currentPageNumber = 1;\n this._isPagesLoaded = null;\n\n this._currentOutlineItemCapability?.resolve(/* enabled = */ false);\n this._currentOutlineItemCapability = null;\n }\n\n /**\n * @protected\n */\n _dispatchEvent(outlineCount) {\n this._currentOutlineItemCapability = Promise.withResolvers();\n if (\n outlineCount === 0 ||\n this._pdfDocument?.loadingParams.disableAutoFetch\n ) {\n this._currentOutlineItemCapability.resolve(/* enabled = */ false);\n } else if (this._isPagesLoaded !== null) {\n this._currentOutlineItemCapability.resolve(\n /* enabled = */ this._isPagesLoaded\n );\n }\n\n this.eventBus.dispatch(\"outlineloaded\", {\n source: this,\n outlineCount,\n currentOutlineItemPromise: this._currentOutlineItemCapability.promise,\n });\n }\n\n /**\n * @protected\n */\n _bindLink(\n element,\n { url, newWindow, action, attachment, dest, setOCGState }\n ) {\n const { linkService } = this;\n\n if (url) {\n linkService.addLinkAttributes(element, url, newWindow);\n return;\n }\n if (action) {\n element.href = linkService.getAnchorUrl(\"\");\n element.onclick = () => {\n linkService.executeNamedAction(action);\n return false;\n };\n return;\n }\n if (attachment) {\n element.href = linkService.getAnchorUrl(\"\");\n element.onclick = () => {\n this.downloadManager.openOrDownloadData(\n attachment.content,\n attachment.filename\n );\n return false;\n };\n return;\n }\n if (setOCGState) {\n element.href = linkService.getAnchorUrl(\"\");\n element.onclick = () => {\n linkService.executeSetOCGState(setOCGState);\n return false;\n };\n return;\n }\n\n element.href = linkService.getDestinationHash(dest);\n element.onclick = evt => {\n this._updateCurrentTreeItem(evt.target.parentNode);\n\n if (dest) {\n linkService.goToDestination(dest);\n }\n return false;\n };\n }\n\n /**\n * @private\n */\n _setStyles(element, { bold, italic }) {\n if (bold) {\n element.style.fontWeight = \"bold\";\n }\n if (italic) {\n element.style.fontStyle = \"italic\";\n }\n }\n\n /**\n * @protected\n */\n _addToggleButton(div, { count, items }) {\n let hidden = false;\n if (count < 0) {\n let totalCount = items.length;\n if (totalCount > 0) {\n const queue = [...items];\n while (queue.length > 0) {\n const { count: nestedCount, items: nestedItems } = queue.shift();\n if (nestedCount > 0 && nestedItems.length > 0) {\n totalCount += nestedItems.length;\n queue.push(...nestedItems);\n }\n }\n }\n if (Math.abs(count) === totalCount) {\n hidden = true;\n }\n }\n super._addToggleButton(div, hidden);\n }\n\n /**\n * @private\n */\n _toggleAllTreeItems() {\n if (!this._outline) {\n return;\n }\n super._toggleAllTreeItems();\n }\n\n /**\n * @param {PDFOutlineViewerRenderParameters} params\n */\n render({ outline, pdfDocument }) {\n if (this._outline) {\n this.reset();\n }\n this._outline = outline || null;\n this._pdfDocument = pdfDocument || null;\n\n if (!outline) {\n this._dispatchEvent(/* outlineCount = */ 0);\n return;\n }\n\n const fragment = document.createDocumentFragment();\n const queue = [{ parent: fragment, items: outline }];\n let outlineCount = 0,\n hasAnyNesting = false;\n while (queue.length > 0) {\n const levelData = queue.shift();\n for (const item of levelData.items) {\n const div = document.createElement(\"div\");\n div.className = \"treeItem\";\n\n const element = document.createElement(\"a\");\n this._bindLink(element, item);\n this._setStyles(element, item);\n element.textContent = this._normalizeTextContent(item.title);\n\n div.append(element);\n\n if (item.items.length > 0) {\n hasAnyNesting = true;\n this._addToggleButton(div, item);\n\n const itemsDiv = document.createElement(\"div\");\n itemsDiv.className = \"treeItems\";\n div.append(itemsDiv);\n\n queue.push({ parent: itemsDiv, items: item.items });\n }\n\n levelData.parent.append(div);\n outlineCount++;\n }\n }\n\n this._finishRendering(fragment, outlineCount, hasAnyNesting);\n }\n\n /**\n * Find/highlight the current outline item, corresponding to the active page.\n * @private\n */\n async _currentOutlineItem() {\n if (!this._isPagesLoaded) {\n throw new Error(\"_currentOutlineItem: All pages have not been loaded.\");\n }\n if (!this._outline || !this._pdfDocument) {\n return;\n }\n\n const pageNumberToDestHash = await this._getPageNumberToDestHash(\n this._pdfDocument\n );\n if (!pageNumberToDestHash) {\n return;\n }\n this._updateCurrentTreeItem(/* treeItem = */ null);\n\n if (this._sidebarView !== SidebarView.OUTLINE) {\n return; // The outline view is no longer visible, hence do nothing.\n }\n // When there is no destination on the current page, always check the\n // previous ones in (reverse) order.\n for (let i = this._currentPageNumber; i > 0; i--) {\n const destHash = pageNumberToDestHash.get(i);\n if (!destHash) {\n continue;\n }\n const linkElement = this.container.querySelector(`a[href=\"${destHash}\"]`);\n if (!linkElement) {\n continue;\n }\n this._scrollToCurrentTreeItem(linkElement.parentNode);\n break;\n }\n }\n\n /**\n * To (significantly) simplify the overall implementation, we will only\n * consider *one* destination per page when finding/highlighting the current\n * outline item (similar to e.g. Adobe Reader); more specifically, we choose\n * the *first* outline item at the *lowest* level of the outline tree.\n * @private\n */\n async _getPageNumberToDestHash(pdfDocument) {\n if (this._pageNumberToDestHashCapability) {\n return this._pageNumberToDestHashCapability.promise;\n }\n this._pageNumberToDestHashCapability = Promise.withResolvers();\n\n const pageNumberToDestHash = new Map(),\n pageNumberNesting = new Map();\n const queue = [{ nesting: 0, items: this._outline }];\n while (queue.length > 0) {\n const levelData = queue.shift(),\n currentNesting = levelData.nesting;\n for (const { dest, items } of levelData.items) {\n let explicitDest, pageNumber;\n if (typeof dest === \"string\") {\n explicitDest = await pdfDocument.getDestination(dest);\n\n if (pdfDocument !== this._pdfDocument) {\n return null; // The document was closed while the data resolved.\n }\n } else {\n explicitDest = dest;\n }\n if (Array.isArray(explicitDest)) {\n const [destRef] = explicitDest;\n\n if (destRef && typeof destRef === \"object\") {\n // The page reference must be available, since the current method\n // won't be invoked until all pages have been loaded.\n pageNumber = pdfDocument.cachedPageNumber(destRef);\n } else if (Number.isInteger(destRef)) {\n pageNumber = destRef + 1;\n }\n\n if (\n Number.isInteger(pageNumber) &&\n (!pageNumberToDestHash.has(pageNumber) ||\n currentNesting > pageNumberNesting.get(pageNumber))\n ) {\n const destHash = this.linkService.getDestinationHash(dest);\n pageNumberToDestHash.set(pageNumber, destHash);\n pageNumberNesting.set(pageNumber, currentNesting);\n }\n }\n\n if (items.length > 0) {\n queue.push({ nesting: currentNesting + 1, items });\n }\n }\n }\n\n this._pageNumberToDestHashCapability.resolve(\n pageNumberToDestHash.size > 0 ? pageNumberToDestHash : null\n );\n return this._pageNumberToDestHashCapability.promise;\n }\n}\n\nexport { PDFOutlineViewer };\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\n/** @typedef {import(\"./event_utils.js\").EventBus} EventBus */\n/** @typedef {import(\"./pdf_viewer.js\").PDFViewer} PDFViewer */\n\nimport {\n normalizeWheelEventDelta,\n PresentationModeState,\n ScrollMode,\n SpreadMode,\n} from \"./ui_utils.js\";\nimport { AnnotationEditorType } from \"pdfjs-lib\";\n\nconst DELAY_BEFORE_HIDING_CONTROLS = 3000; // in ms\nconst ACTIVE_SELECTOR = \"pdfPresentationMode\";\nconst CONTROLS_SELECTOR = \"pdfPresentationModeControls\";\nconst MOUSE_SCROLL_COOLDOWN_TIME = 50; // in ms\nconst PAGE_SWITCH_THRESHOLD = 0.1;\n\n// Number of CSS pixels for a movement to count as a swipe.\nconst SWIPE_MIN_DISTANCE_THRESHOLD = 50;\n\n// Swipe angle deviation from the x or y axis before it is not\n// considered a swipe in that direction any more.\nconst SWIPE_ANGLE_THRESHOLD = Math.PI / 6;\n\n/**\n * @typedef {Object} PDFPresentationModeOptions\n * @property {HTMLDivElement} container - The container for the viewer element.\n * @property {PDFViewer} pdfViewer - The document viewer.\n * @property {EventBus} eventBus - The application event bus.\n */\n\nclass PDFPresentationMode {\n #state = PresentationModeState.UNKNOWN;\n\n #args = null;\n\n #fullscreenChangeAbortController = null;\n\n #windowAbortController = null;\n\n /**\n * @param {PDFPresentationModeOptions} options\n */\n constructor({ container, pdfViewer, eventBus }) {\n this.container = container;\n this.pdfViewer = pdfViewer;\n this.eventBus = eventBus;\n\n this.contextMenuOpen = false;\n this.mouseScrollTimeStamp = 0;\n this.mouseScrollDelta = 0;\n this.touchSwipeState = null;\n }\n\n /**\n * Request the browser to enter fullscreen mode.\n * @returns {Promise<boolean>} Indicating if the request was successful.\n */\n async request() {\n const { container, pdfViewer } = this;\n\n if (this.active || !pdfViewer.pagesCount || !container.requestFullscreen) {\n return false;\n }\n this.#addFullscreenChangeListeners();\n this.#notifyStateChange(PresentationModeState.CHANGING);\n\n const promise = container.requestFullscreen();\n\n this.#args = {\n pageNumber: pdfViewer.currentPageNumber,\n scaleValue: pdfViewer.currentScaleValue,\n scrollMode: pdfViewer.scrollMode,\n spreadMode: null,\n annotationEditorMode: null,\n };\n\n if (\n pdfViewer.spreadMode !== SpreadMode.NONE &&\n !(pdfViewer.pageViewsReady && pdfViewer.hasEqualPageSizes)\n ) {\n console.warn(\n \"Ignoring Spread modes when entering PresentationMode, \" +\n \"since the document may contain varying page sizes.\"\n );\n this.#args.spreadMode = pdfViewer.spreadMode;\n }\n if (pdfViewer.annotationEditorMode !== AnnotationEditorType.DISABLE) {\n this.#args.annotationEditorMode = pdfViewer.annotationEditorMode;\n }\n\n try {\n await promise;\n pdfViewer.focus(); // Fixes bug 1787456.\n return true;\n } catch {\n this.#removeFullscreenChangeListeners();\n this.#notifyStateChange(PresentationModeState.NORMAL);\n }\n return false;\n }\n\n get active() {\n return (\n this.#state === PresentationModeState.CHANGING ||\n this.#state === PresentationModeState.FULLSCREEN\n );\n }\n\n #mouseWheel(evt) {\n if (!this.active) {\n return;\n }\n evt.preventDefault();\n\n const delta = normalizeWheelEventDelta(evt);\n const currentTime = Date.now();\n const storedTime = this.mouseScrollTimeStamp;\n\n // If we've already switched page, avoid accidentally switching again.\n if (\n currentTime > storedTime &&\n currentTime - storedTime < MOUSE_SCROLL_COOLDOWN_TIME\n ) {\n return;\n }\n // If the scroll direction changed, reset the accumulated scroll delta.\n if (\n (this.mouseScrollDelta > 0 && delta < 0) ||\n (this.mouseScrollDelta < 0 && delta > 0)\n ) {\n this.#resetMouseScrollState();\n }\n this.mouseScrollDelta += delta;\n\n if (Math.abs(this.mouseScrollDelta) >= PAGE_SWITCH_THRESHOLD) {\n const totalDelta = this.mouseScrollDelta;\n this.#resetMouseScrollState();\n const success =\n totalDelta > 0\n ? this.pdfViewer.previousPage()\n : this.pdfViewer.nextPage();\n if (success) {\n this.mouseScrollTimeStamp = currentTime;\n }\n }\n }\n\n #notifyStateChange(state) {\n this.#state = state;\n\n this.eventBus.dispatch(\"presentationmodechanged\", { source: this, state });\n }\n\n #enter() {\n this.#notifyStateChange(PresentationModeState.FULLSCREEN);\n this.container.classList.add(ACTIVE_SELECTOR);\n\n // Ensure that the correct page is scrolled into view when entering\n // Presentation Mode, by waiting until fullscreen mode in enabled.\n setTimeout(() => {\n this.pdfViewer.scrollMode = ScrollMode.PAGE;\n if (this.#args.spreadMode !== null) {\n this.pdfViewer.spreadMode = SpreadMode.NONE;\n }\n this.pdfViewer.currentPageNumber = this.#args.pageNumber;\n this.pdfViewer.currentScaleValue = \"page-fit\";\n\n if (this.#args.annotationEditorMode !== null) {\n this.pdfViewer.annotationEditorMode = {\n mode: AnnotationEditorType.NONE,\n };\n }\n }, 0);\n\n this.#addWindowListeners();\n this.#showControls();\n this.contextMenuOpen = false;\n\n // Text selection is disabled in Presentation Mode, thus it's not possible\n // for the user to deselect text that is selected (e.g. with \"Select all\")\n // when entering Presentation Mode, hence we remove any active selection.\n document.getSelection().empty();\n }\n\n #exit() {\n const pageNumber = this.pdfViewer.currentPageNumber;\n this.container.classList.remove(ACTIVE_SELECTOR);\n\n // Ensure that the correct page is scrolled into view when exiting\n // Presentation Mode, by waiting until fullscreen mode is disabled.\n setTimeout(() => {\n this.#removeFullscreenChangeListeners();\n this.#notifyStateChange(PresentationModeState.NORMAL);\n\n this.pdfViewer.scrollMode = this.#args.scrollMode;\n if (this.#args.spreadMode !== null) {\n this.pdfViewer.spreadMode = this.#args.spreadMode;\n }\n this.pdfViewer.currentScaleValue = this.#args.scaleValue;\n this.pdfViewer.currentPageNumber = pageNumber;\n\n if (this.#args.annotationEditorMode !== null) {\n this.pdfViewer.annotationEditorMode = {\n mode: this.#args.annotationEditorMode,\n };\n }\n this.#args = null;\n }, 0);\n\n this.#removeWindowListeners();\n this.#hideControls();\n this.#resetMouseScrollState();\n this.contextMenuOpen = false;\n }\n\n #mouseDown(evt) {\n if (this.contextMenuOpen) {\n this.contextMenuOpen = false;\n evt.preventDefault();\n return;\n }\n if (evt.button !== 0) {\n return;\n }\n // Enable clicking of links in presentation mode. Note: only links\n // pointing to destinations in the current PDF document work.\n if (\n evt.target.href &&\n evt.target.parentNode?.hasAttribute(\"data-internal-link\")\n ) {\n return;\n }\n // Unless an internal link was clicked, advance one page.\n evt.preventDefault();\n\n if (evt.shiftKey) {\n this.pdfViewer.previousPage();\n } else {\n this.pdfViewer.nextPage();\n }\n }\n\n #contextMenu() {\n this.contextMenuOpen = true;\n }\n\n #showControls() {\n if (this.controlsTimeout) {\n clearTimeout(this.controlsTimeout);\n } else {\n this.container.classList.add(CONTROLS_SELECTOR);\n }\n this.controlsTimeout = setTimeout(() => {\n this.container.classList.remove(CONTROLS_SELECTOR);\n delete this.controlsTimeout;\n }, DELAY_BEFORE_HIDING_CONTROLS);\n }\n\n #hideControls() {\n if (!this.controlsTimeout) {\n return;\n }\n clearTimeout(this.controlsTimeout);\n this.container.classList.remove(CONTROLS_SELECTOR);\n delete this.controlsTimeout;\n }\n\n /**\n * Resets the properties used for tracking mouse scrolling events.\n */\n #resetMouseScrollState() {\n this.mouseScrollTimeStamp = 0;\n this.mouseScrollDelta = 0;\n }\n\n #touchSwipe(evt) {\n if (!this.active) {\n return;\n }\n if (evt.touches.length > 1) {\n // Multiple touch points detected; cancel the swipe.\n this.touchSwipeState = null;\n return;\n }\n\n switch (evt.type) {\n case \"touchstart\":\n this.touchSwipeState = {\n startX: evt.touches[0].pageX,\n startY: evt.touches[0].pageY,\n endX: evt.touches[0].pageX,\n endY: evt.touches[0].pageY,\n };\n break;\n case \"touchmove\":\n if (this.touchSwipeState === null) {\n return;\n }\n this.touchSwipeState.endX = evt.touches[0].pageX;\n this.touchSwipeState.endY = evt.touches[0].pageY;\n // Avoid the swipe from triggering browser gestures (Chrome in\n // particular has some sort of swipe gesture in fullscreen mode).\n evt.preventDefault();\n break;\n case \"touchend\":\n if (this.touchSwipeState === null) {\n return;\n }\n let delta = 0;\n const dx = this.touchSwipeState.endX - this.touchSwipeState.startX;\n const dy = this.touchSwipeState.endY - this.touchSwipeState.startY;\n const absAngle = Math.abs(Math.atan2(dy, dx));\n if (\n Math.abs(dx) > SWIPE_MIN_DISTANCE_THRESHOLD &&\n (absAngle <= SWIPE_ANGLE_THRESHOLD ||\n absAngle >= Math.PI - SWIPE_ANGLE_THRESHOLD)\n ) {\n // Horizontal swipe.\n delta = dx;\n } else if (\n Math.abs(dy) > SWIPE_MIN_DISTANCE_THRESHOLD &&\n Math.abs(absAngle - Math.PI / 2) <= SWIPE_ANGLE_THRESHOLD\n ) {\n // Vertical swipe.\n delta = dy;\n }\n if (delta > 0) {\n this.pdfViewer.previousPage();\n } else if (delta < 0) {\n this.pdfViewer.nextPage();\n }\n break;\n }\n }\n\n #addWindowListeners() {\n if (this.#windowAbortController) {\n return;\n }\n this.#windowAbortController = new AbortController();\n const { signal } = this.#windowAbortController;\n\n const touchSwipeBind = this.#touchSwipe.bind(this);\n\n window.addEventListener(\"mousemove\", this.#showControls.bind(this), {\n signal,\n });\n window.addEventListener(\"mousedown\", this.#mouseDown.bind(this), {\n signal,\n });\n window.addEventListener(\"wheel\", this.#mouseWheel.bind(this), {\n passive: false,\n signal,\n });\n window.addEventListener(\"keydown\", this.#resetMouseScrollState.bind(this), {\n signal,\n });\n window.addEventListener(\"contextmenu\", this.#contextMenu.bind(this), {\n signal,\n });\n window.addEventListener(\"touchstart\", touchSwipeBind, { signal });\n window.addEventListener(\"touchmove\", touchSwipeBind, { signal });\n window.addEventListener(\"touchend\", touchSwipeBind, { signal });\n }\n\n #removeWindowListeners() {\n this.#windowAbortController?.abort();\n this.#windowAbortController = null;\n }\n\n #addFullscreenChangeListeners() {\n if (this.#fullscreenChangeAbortController) {\n return;\n }\n this.#fullscreenChangeAbortController = new AbortController();\n\n window.addEventListener(\n \"fullscreenchange\",\n () => {\n if (/* isFullscreen = */ document.fullscreenElement) {\n this.#enter();\n } else {\n this.#exit();\n }\n },\n { signal: this.#fullscreenChangeAbortController.signal }\n );\n }\n\n #removeFullscreenChangeListeners() {\n this.#fullscreenChangeAbortController?.abort();\n this.#fullscreenChangeAbortController = null;\n }\n}\n\nexport { PDFPresentationMode };\n","/* Copyright 2021 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\n/** @typedef {import(\"../src/display/api\").PDFPageProxy} PDFPageProxy */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"../src/display/annotation_storage\").AnnotationStorage} AnnotationStorage */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"../src/display/display_utils\").PageViewport} PageViewport */\n/** @typedef {import(\"./interfaces\").IPDFLinkService} IPDFLinkService */\n\nimport { XfaLayer } from \"pdfjs-lib\";\n\n/**\n * @typedef {Object} XfaLayerBuilderOptions\n * @property {PDFPageProxy} pdfPage\n * @property {AnnotationStorage} [annotationStorage]\n * @property {IPDFLinkService} linkService\n * @property {Object} [xfaHtml]\n */\n\nclass XfaLayerBuilder {\n /**\n * @param {XfaLayerBuilderOptions} options\n */\n constructor({\n pdfPage,\n annotationStorage = null,\n linkService,\n xfaHtml = null,\n }) {\n this.pdfPage = pdfPage;\n this.annotationStorage = annotationStorage;\n this.linkService = linkService;\n this.xfaHtml = xfaHtml;\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 * @returns {Promise<Object | void>} A promise that is resolved when rendering\n * of the XFA layer is complete. The first rendering will return an object\n * with a `textDivs` property that can be used with the TextHighlighter.\n */\n async render(viewport, intent = \"display\") {\n if (intent === \"print\") {\n const parameters = {\n viewport: viewport.clone({ dontFlip: true }),\n div: this.div,\n xfaHtml: this.xfaHtml,\n annotationStorage: this.annotationStorage,\n linkService: this.linkService,\n intent,\n };\n\n // Create an xfa layer div and render the form\n this.div = document.createElement(\"div\");\n parameters.div = this.div;\n\n return XfaLayer.render(parameters);\n }\n\n // intent === \"display\"\n const xfaHtml = await this.pdfPage.getXfa();\n if (this._cancelled || !xfaHtml) {\n return { textDivs: [] };\n }\n\n const parameters = {\n viewport: viewport.clone({ dontFlip: true }),\n div: this.div,\n xfaHtml,\n annotationStorage: this.annotationStorage,\n linkService: this.linkService,\n intent,\n };\n\n if (this.div) {\n return XfaLayer.update(parameters);\n }\n // Create an xfa layer div and render the form\n this.div = document.createElement(\"div\");\n parameters.div = this.div;\n\n return XfaLayer.render(parameters);\n }\n\n cancel() {\n this._cancelled = true;\n }\n\n hide() {\n if (!this.div) {\n return;\n }\n this.div.hidden = true;\n }\n}\n\nexport { XfaLayerBuilder };\n","/* Copyright 2021 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 { getXfaPageViewport, PixelsPerInch } from \"pdfjs-lib\";\nimport { SimpleLinkService } from \"./pdf_link_service.js\";\nimport { XfaLayerBuilder } from \"./xfa_layer_builder.js\";\n\nfunction getXfaHtmlForPrinting(printContainer, pdfDocument) {\n const xfaHtml = pdfDocument.allXfaHtml;\n const linkService = new SimpleLinkService();\n const scale = Math.round(PixelsPerInch.PDF_TO_CSS_UNITS * 100) / 100;\n\n for (const xfaPage of xfaHtml.children) {\n const page = document.createElement(\"div\");\n page.className = \"xfaPrintedPage\";\n printContainer.append(page);\n\n const builder = new XfaLayerBuilder({\n pdfPage: null,\n annotationStorage: pdfDocument.annotationStorage,\n linkService,\n xfaHtml: xfaPage,\n });\n const viewport = getXfaPageViewport(xfaPage, { scale });\n\n builder.render(viewport, \"print\");\n page.append(builder.div);\n }\n}\n\nexport { getXfaHtmlForPrinting };\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\n// eslint-disable-next-line max-len\n/** @typedef {import(\"./interfaces.js\").IPDFPrintServiceFactory} IPDFPrintServiceFactory */\n\nimport {\n AnnotationMode,\n PixelsPerInch,\n RenderingCancelledException,\n shadow,\n} from \"pdfjs-lib\";\nimport { getXfaHtmlForPrinting } from \"./print_utils.js\";\n\nlet activeService = null;\nlet dialog = null;\nlet overlayManager = null;\nlet viewerApp = { initialized: false };\n\n// Renders the page to the canvas of the given print service, and returns\n// the suggested dimensions of the output page.\nfunction renderPage(\n activeServiceOnEntry,\n pdfDocument,\n pageNumber,\n size,\n printResolution,\n optionalContentConfigPromise,\n printAnnotationStoragePromise\n) {\n const scratchCanvas = activeService.scratchCanvas;\n\n // The size of the canvas in pixels for printing.\n const PRINT_UNITS = printResolution / PixelsPerInch.PDF;\n scratchCanvas.width = Math.floor(size.width * PRINT_UNITS);\n scratchCanvas.height = Math.floor(size.height * PRINT_UNITS);\n\n const ctx = scratchCanvas.getContext(\"2d\");\n ctx.save();\n ctx.fillStyle = \"rgb(255, 255, 255)\";\n ctx.fillRect(0, 0, scratchCanvas.width, scratchCanvas.height);\n ctx.restore();\n\n return Promise.all([\n pdfDocument.getPage(pageNumber),\n printAnnotationStoragePromise,\n ]).then(function ([pdfPage, printAnnotationStorage]) {\n const renderContext = {\n canvasContext: ctx,\n transform: [PRINT_UNITS, 0, 0, PRINT_UNITS, 0, 0],\n viewport: pdfPage.getViewport({ scale: 1, rotation: size.rotation }),\n intent: \"print\",\n annotationMode: AnnotationMode.ENABLE_STORAGE,\n optionalContentConfigPromise,\n printAnnotationStorage,\n };\n const renderTask = pdfPage.render(renderContext);\n\n return renderTask.promise.catch(reason => {\n if (!(reason instanceof RenderingCancelledException)) {\n console.error(reason);\n }\n throw reason;\n });\n });\n}\n\nclass PDFPrintService {\n constructor({\n pdfDocument,\n pagesOverview,\n printContainer,\n printResolution,\n printAnnotationStoragePromise = null,\n }) {\n this.pdfDocument = pdfDocument;\n this.pagesOverview = pagesOverview;\n this.printContainer = printContainer;\n this._printResolution = printResolution || 150;\n this._optionalContentConfigPromise = pdfDocument.getOptionalContentConfig({\n intent: \"print\",\n });\n this._printAnnotationStoragePromise =\n printAnnotationStoragePromise || Promise.resolve();\n this.currentPage = -1;\n // The temporary canvas where renderPage paints one page at a time.\n this.scratchCanvas = document.createElement(\"canvas\");\n }\n\n layout() {\n this.throwIfInactive();\n\n const body = document.querySelector(\"body\");\n body.setAttribute(\"data-pdfjsprinting\", true);\n\n const { width, height } = this.pagesOverview[0];\n const hasEqualPageSizes = this.pagesOverview.every(\n size => size.width === width && size.height === height\n );\n if (!hasEqualPageSizes) {\n console.warn(\n \"Not all pages have the same size. The printed result may be incorrect!\"\n );\n }\n\n // Insert a @page + size rule to make sure that the page size is correctly\n // set. Note that we assume that all pages have the same size, because\n // variable-size pages are not supported yet (e.g. in Chrome & Firefox).\n // TODO(robwu): Use named pages when size calculation bugs get resolved\n // (e.g. https://crbug.com/355116) AND when support for named pages is\n // added (http://www.w3.org/TR/css3-page/#using-named-pages).\n // In browsers where @page + size is not supported, the next stylesheet\n // will be ignored and the user has to select the correct paper size in\n // the UI if wanted.\n this.pageStyleSheet = document.createElement(\"style\");\n this.pageStyleSheet.textContent = `@page { size: ${width}pt ${height}pt;}`;\n body.append(this.pageStyleSheet);\n }\n\n destroy() {\n if (activeService !== this) {\n // |activeService| cannot be replaced without calling destroy() first,\n // so if it differs then an external consumer has a stale reference to us.\n return;\n }\n this.printContainer.textContent = \"\";\n\n const body = document.querySelector(\"body\");\n body.removeAttribute(\"data-pdfjsprinting\");\n\n if (this.pageStyleSheet) {\n this.pageStyleSheet.remove();\n this.pageStyleSheet = null;\n }\n this.scratchCanvas.width = this.scratchCanvas.height = 0;\n this.scratchCanvas = null;\n activeService = null;\n ensureOverlay().then(function () {\n if (overlayManager.active === dialog) {\n overlayManager.close(dialog);\n }\n });\n }\n\n renderPages() {\n if (this.pdfDocument.isPureXfa) {\n getXfaHtmlForPrinting(this.printContainer, this.pdfDocument);\n return Promise.resolve();\n }\n\n const pageCount = this.pagesOverview.length;\n const renderNextPage = (resolve, reject) => {\n this.throwIfInactive();\n if (++this.currentPage >= pageCount) {\n renderProgress(pageCount, pageCount);\n resolve();\n return;\n }\n const index = this.currentPage;\n renderProgress(index, pageCount);\n renderPage(\n this,\n this.pdfDocument,\n /* pageNumber = */ index + 1,\n this.pagesOverview[index],\n this._printResolution,\n this._optionalContentConfigPromise,\n this._printAnnotationStoragePromise\n )\n .then(this.useRenderedPage.bind(this))\n .then(function () {\n renderNextPage(resolve, reject);\n }, reject);\n };\n return new Promise(renderNextPage);\n }\n\n useRenderedPage() {\n this.throwIfInactive();\n const img = document.createElement(\"img\");\n const scratchCanvas = this.scratchCanvas;\n if (\"toBlob\" in scratchCanvas) {\n scratchCanvas.toBlob(function (blob) {\n img.src = URL.createObjectURL(blob);\n });\n } else {\n img.src = scratchCanvas.toDataURL();\n }\n\n const wrapper = document.createElement(\"div\");\n wrapper.className = \"printedPage\";\n wrapper.append(img);\n this.printContainer.append(wrapper);\n\n return new Promise(function (resolve, reject) {\n img.onload = resolve;\n img.onerror = reject;\n });\n }\n\n performPrint() {\n this.throwIfInactive();\n return new Promise(resolve => {\n // Push window.print in the macrotask queue to avoid being affected by\n // the deprecation of running print() code in a microtask, see\n // https://github.com/mozilla/pdf.js/issues/7547.\n setTimeout(() => {\n if (!this.active) {\n resolve();\n return;\n }\n print.call(window);\n // Delay promise resolution in case print() was not synchronous.\n setTimeout(resolve, 20); // Tidy-up.\n }, 0);\n });\n }\n\n get active() {\n return this === activeService;\n }\n\n throwIfInactive() {\n if (!this.active) {\n throw new Error(\"This print request was cancelled or completed.\");\n }\n }\n}\n\nconst print = window.print;\nwindow.print = function () {\n if (activeService) {\n console.warn(\"Ignored window.print() because of a pending print job.\");\n return;\n }\n ensureOverlay().then(function () {\n if (activeService) {\n overlayManager.open(dialog);\n }\n });\n\n try {\n dispatchEvent(\"beforeprint\");\n } finally {\n if (!activeService) {\n console.error(\"Expected print service to be initialized.\");\n ensureOverlay().then(function () {\n if (overlayManager.active === dialog) {\n overlayManager.close(dialog);\n }\n });\n return; // eslint-disable-line no-unsafe-finally\n }\n const activeServiceOnEntry = activeService;\n activeService\n .renderPages()\n .then(function () {\n return activeServiceOnEntry.performPrint();\n })\n .catch(function () {\n // Ignore any error messages.\n })\n .then(function () {\n // aborts acts on the \"active\" print request, so we need to check\n // whether the print request (activeServiceOnEntry) is still active.\n // Without the check, an unrelated print request (created after aborting\n // this print request while the pages were being generated) would be\n // aborted.\n if (activeServiceOnEntry.active) {\n abort();\n }\n });\n }\n};\n\nfunction dispatchEvent(eventType) {\n const event = new CustomEvent(eventType, {\n bubbles: false,\n cancelable: false,\n detail: \"custom\",\n });\n window.dispatchEvent(event);\n}\n\nfunction abort() {\n if (activeService) {\n activeService.destroy();\n dispatchEvent(\"afterprint\");\n }\n}\n\nfunction renderProgress(index, total) {\n if (typeof PDFJSDev === \"undefined\" && window.isGECKOVIEW) {\n return;\n }\n dialog ||= document.getElementById(\"printServiceDialog\");\n const progress = Math.round((100 * index) / total);\n const progressBar = dialog.querySelector(\"progress\");\n const progressPerc = dialog.querySelector(\".relative-progress\");\n progressBar.value = progress;\n progressPerc.setAttribute(\"data-l10n-args\", JSON.stringify({ progress }));\n}\n\nwindow.addEventListener(\n \"keydown\",\n function (event) {\n // Intercept Cmd/Ctrl + P in all browsers.\n // Also intercept Cmd/Ctrl + Shift + P in Chrome and Opera\n if (\n event.keyCode === /* P= */ 80 &&\n (event.ctrlKey || event.metaKey) &&\n !event.altKey &&\n (!event.shiftKey || window.chrome || window.opera)\n ) {\n window.print();\n\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n },\n true\n);\n\nif (\"onbeforeprint\" in window) {\n // Do not propagate before/afterprint events when they are not triggered\n // from within this polyfill. (FF / Chrome 63+).\n const stopPropagationIfNeeded = function (event) {\n if (event.detail !== \"custom\") {\n event.stopImmediatePropagation();\n }\n };\n window.addEventListener(\"beforeprint\", stopPropagationIfNeeded);\n window.addEventListener(\"afterprint\", stopPropagationIfNeeded);\n}\n\nlet overlayPromise;\nfunction ensureOverlay() {\n if (typeof PDFJSDev === \"undefined\" && window.isGECKOVIEW) {\n return Promise.reject(\n new Error(\"ensureOverlay not implemented in GECKOVIEW development mode.\")\n );\n }\n if (!overlayPromise) {\n overlayManager = viewerApp.overlayManager;\n if (!overlayManager) {\n throw new Error(\"The overlay manager has not yet been initialized.\");\n }\n dialog ||= document.getElementById(\"printServiceDialog\");\n\n overlayPromise = overlayManager.register(\n dialog,\n /* canForceClose = */ true\n );\n\n document.getElementById(\"printCancel\").onclick = abort;\n dialog.addEventListener(\"close\", abort);\n }\n return overlayPromise;\n}\n\n/**\n * @implements {IPDFPrintServiceFactory}\n */\nclass PDFPrintServiceFactory {\n static initGlobals(app) {\n viewerApp = app;\n }\n\n static get supportsPrinting() {\n return shadow(this, \"supportsPrinting\", true);\n }\n\n static createPrintService(params) {\n if (activeService) {\n throw new Error(\"The print service is created and active.\");\n }\n return (activeService = new PDFPrintService(params));\n }\n}\n\nexport { PDFPrintServiceFactory };\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\n/** @typedef {import(\"./interfaces\").IRenderableView} IRenderableView */\n/** @typedef {import(\"./pdf_viewer\").PDFViewer} PDFViewer */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"./pdf_thumbnail_viewer\").PDFThumbnailViewer} PDFThumbnailViewer */\n\nimport { RenderingCancelledException } from \"pdfjs-lib\";\nimport { RenderingStates } from \"./ui_utils.js\";\n\nconst CLEANUP_TIMEOUT = 30000;\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 /** @type {number} */\n this.idleTimeout = null;\n this.printing = false;\n this.isThumbnailViewEnabled = false;\n\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n Object.defineProperty(this, \"hasViewer\", {\n value: () => !!this.pdfViewer,\n });\n }\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 (\n this.isThumbnailViewEnabled &&\n this.pdfThumbnailViewer?.forceRendering()\n ) {\n return;\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 * @param {boolean} [preRenderExtra]\n */\n getHighestPriority(visible, views, scrolledDown, preRenderExtra = false) {\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 const visibleViews = visible.views,\n numVisible = visibleViews.length;\n\n if (numVisible === 0) {\n return null;\n }\n for (let i = 0; i < numVisible; i++) {\n const view = visibleViews[i].view;\n if (!this.isViewFinished(view)) {\n return view;\n }\n }\n const firstId = visible.first.id,\n lastId = visible.last.id;\n\n // All the visible views have rendered; try to handle any \"holes\" in the\n // page layout (can happen e.g. with spreadModes at higher zoom levels).\n if (lastId - firstId + 1 > numVisible) {\n const visibleIds = visible.ids;\n for (let i = 1, ii = lastId - firstId; i < ii; i++) {\n const holeId = scrolledDown ? firstId + i : lastId - i;\n if (visibleIds.has(holeId)) {\n continue;\n }\n const holeView = views[holeId - 1];\n if (!this.isViewFinished(holeView)) {\n return holeView;\n }\n }\n }\n\n // All the visible views have rendered; try to render next/previous page.\n // (IDs start at 1, so no need to add 1 when `scrolledDown === true`.)\n let preRenderIndex = scrolledDown ? lastId : firstId - 2;\n let preRenderView = views[preRenderIndex];\n\n if (preRenderView && !this.isViewFinished(preRenderView)) {\n return preRenderView;\n }\n if (preRenderExtra) {\n preRenderIndex += scrolledDown ? 1 : -1;\n preRenderView = views[preRenderIndex];\n\n if (preRenderView && !this.isViewFinished(preRenderView)) {\n return preRenderView;\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\n .draw()\n .finally(() => {\n this.renderHighestPriority();\n })\n .catch(reason => {\n if (reason instanceof RenderingCancelledException) {\n return;\n }\n console.error(`renderView: \"${reason}\"`);\n });\n break;\n }\n return true;\n }\n}\n\nexport { PDFRenderingQueue };\n","/* Copyright 2021 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\n/** @typedef {import(\"./event_utils\").EventBus} EventBus */\n\nimport { apiPageLayoutToViewerModes, RenderingStates } from \"./ui_utils.js\";\nimport { shadow } from \"pdfjs-lib\";\n\n/**\n * @typedef {Object} PDFScriptingManagerOptions\n * @property {EventBus} eventBus - The application event bus.\n * @property {string} [sandboxBundleSrc] - The path and filename of the\n * scripting bundle.\n * @property {Object} [externalServices] - The factory that is used when\n * initializing scripting; must contain a `createScripting` method.\n * PLEASE NOTE: Primarily intended for the default viewer use-case.\n * @property {function} [docProperties] - The function that is used to lookup\n * the necessary document properties.\n */\n\nclass PDFScriptingManager {\n #closeCapability = null;\n\n #destroyCapability = null;\n\n #docProperties = null;\n\n #eventAbortController = null;\n\n #eventBus = null;\n\n #externalServices = null;\n\n #pdfDocument = null;\n\n #pdfViewer = null;\n\n #ready = false;\n\n #scripting = null;\n\n #willPrintCapability = null;\n\n /**\n * @param {PDFScriptingManagerOptions} options\n */\n constructor({ eventBus, externalServices = null, docProperties = null }) {\n this.#eventBus = eventBus;\n this.#externalServices = externalServices;\n this.#docProperties = docProperties;\n\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"TESTING\")) {\n Object.defineProperty(this, \"sandboxTrip\", {\n value: () =>\n setTimeout(\n () =>\n this.#scripting?.dispatchEventInSandbox({\n name: \"sandboxtripbegin\",\n }),\n 0\n ),\n });\n }\n }\n\n setViewer(pdfViewer) {\n this.#pdfViewer = pdfViewer;\n }\n\n async setDocument(pdfDocument) {\n if (this.#pdfDocument) {\n await this.#destroyScripting();\n }\n this.#pdfDocument = pdfDocument;\n\n if (!pdfDocument) {\n return;\n }\n const [objects, calculationOrder, docActions] = await Promise.all([\n pdfDocument.getFieldObjects(),\n pdfDocument.getCalculationOrderIds(),\n pdfDocument.getJSActions(),\n ]);\n\n if (!objects && !docActions) {\n // No FieldObjects or JavaScript actions were found in the document.\n await this.#destroyScripting();\n return;\n }\n if (pdfDocument !== this.#pdfDocument) {\n return; // The document was closed while the data resolved.\n }\n try {\n this.#scripting = this.#initScripting();\n } catch (error) {\n console.error(`setDocument: \"${error.message}\".`);\n\n await this.#destroyScripting();\n return;\n }\n const eventBus = this.#eventBus;\n\n this.#eventAbortController = new AbortController();\n const { signal } = this.#eventAbortController;\n\n eventBus._on(\n \"updatefromsandbox\",\n event => {\n if (event?.source === window) {\n this.#updateFromSandbox(event.detail);\n }\n },\n { signal }\n );\n eventBus._on(\n \"dispatcheventinsandbox\",\n event => {\n this.#scripting?.dispatchEventInSandbox(event.detail);\n },\n { signal }\n );\n\n eventBus._on(\n \"pagechanging\",\n ({ pageNumber, previous }) => {\n if (pageNumber === previous) {\n return; // The current page didn't change.\n }\n this.#dispatchPageClose(previous);\n this.#dispatchPageOpen(pageNumber);\n },\n { signal }\n );\n eventBus._on(\n \"pagerendered\",\n ({ pageNumber }) => {\n if (!this._pageOpenPending.has(pageNumber)) {\n return; // No pending \"PageOpen\" event for the newly rendered page.\n }\n if (pageNumber !== this.#pdfViewer.currentPageNumber) {\n return; // The newly rendered page is no longer the current one.\n }\n this.#dispatchPageOpen(pageNumber);\n },\n { signal }\n );\n eventBus._on(\n \"pagesdestroy\",\n async () => {\n await this.#dispatchPageClose(this.#pdfViewer.currentPageNumber);\n\n await this.#scripting?.dispatchEventInSandbox({\n id: \"doc\",\n name: \"WillClose\",\n });\n\n this.#closeCapability?.resolve();\n },\n { signal }\n );\n\n try {\n const docProperties = await this.#docProperties(pdfDocument);\n if (pdfDocument !== this.#pdfDocument) {\n return; // The document was closed while the properties resolved.\n }\n\n await this.#scripting.createSandbox({\n objects,\n calculationOrder,\n appInfo: {\n platform: navigator.platform,\n language: navigator.language,\n },\n docInfo: {\n ...docProperties,\n actions: docActions,\n },\n });\n\n eventBus.dispatch(\"sandboxcreated\", { source: this });\n } catch (error) {\n console.error(`setDocument: \"${error.message}\".`);\n\n await this.#destroyScripting();\n return;\n }\n\n await this.#scripting?.dispatchEventInSandbox({\n id: \"doc\",\n name: \"Open\",\n });\n await this.#dispatchPageOpen(\n this.#pdfViewer.currentPageNumber,\n /* initialize = */ true\n );\n\n // Defer this slightly, to ensure that scripting is *fully* initialized.\n Promise.resolve().then(() => {\n if (pdfDocument === this.#pdfDocument) {\n this.#ready = true;\n }\n });\n }\n\n async dispatchWillSave() {\n return this.#scripting?.dispatchEventInSandbox({\n id: \"doc\",\n name: \"WillSave\",\n });\n }\n\n async dispatchDidSave() {\n return this.#scripting?.dispatchEventInSandbox({\n id: \"doc\",\n name: \"DidSave\",\n });\n }\n\n async dispatchWillPrint() {\n if (!this.#scripting) {\n return;\n }\n await this.#willPrintCapability?.promise;\n this.#willPrintCapability = Promise.withResolvers();\n try {\n await this.#scripting.dispatchEventInSandbox({\n id: \"doc\",\n name: \"WillPrint\",\n });\n } catch (ex) {\n this.#willPrintCapability.resolve();\n this.#willPrintCapability = null;\n throw ex;\n }\n\n await this.#willPrintCapability.promise;\n }\n\n async dispatchDidPrint() {\n return this.#scripting?.dispatchEventInSandbox({\n id: \"doc\",\n name: \"DidPrint\",\n });\n }\n\n get destroyPromise() {\n return this.#destroyCapability?.promise || null;\n }\n\n get ready() {\n return this.#ready;\n }\n\n /**\n * @private\n */\n get _pageOpenPending() {\n return shadow(this, \"_pageOpenPending\", new Set());\n }\n\n /**\n * @private\n */\n get _visitedPages() {\n return shadow(this, \"_visitedPages\", new Map());\n }\n\n async #updateFromSandbox(detail) {\n const pdfViewer = this.#pdfViewer;\n // Ignore some events, see below, that don't make sense in PresentationMode.\n const isInPresentationMode =\n pdfViewer.isInPresentationMode || pdfViewer.isChangingPresentationMode;\n\n const { id, siblings, command, value } = detail;\n if (!id) {\n if (\n typeof PDFJSDev !== \"undefined\" &&\n PDFJSDev.test(\"TESTING\") &&\n command === \"sandboxTripEnd\"\n ) {\n window.setTimeout(() => {\n window.dispatchEvent(new CustomEvent(\"sandboxtripend\"));\n }, 0);\n return;\n }\n\n switch (command) {\n case \"clear\":\n console.clear();\n break;\n case \"error\":\n console.error(value);\n break;\n case \"layout\":\n if (!isInPresentationMode) {\n const modes = apiPageLayoutToViewerModes(value);\n pdfViewer.spreadMode = modes.spreadMode;\n }\n break;\n case \"page-num\":\n pdfViewer.currentPageNumber = value + 1;\n break;\n case \"print\":\n await pdfViewer.pagesPromise;\n this.#eventBus.dispatch(\"print\", { source: this });\n break;\n case \"println\":\n console.log(value);\n break;\n case \"zoom\":\n if (!isInPresentationMode) {\n pdfViewer.currentScaleValue = value;\n }\n break;\n case \"SaveAs\":\n this.#eventBus.dispatch(\"download\", { source: this });\n break;\n case \"FirstPage\":\n pdfViewer.currentPageNumber = 1;\n break;\n case \"LastPage\":\n pdfViewer.currentPageNumber = pdfViewer.pagesCount;\n break;\n case \"NextPage\":\n pdfViewer.nextPage();\n break;\n case \"PrevPage\":\n pdfViewer.previousPage();\n break;\n case \"ZoomViewIn\":\n if (!isInPresentationMode) {\n pdfViewer.increaseScale();\n }\n break;\n case \"ZoomViewOut\":\n if (!isInPresentationMode) {\n pdfViewer.decreaseScale();\n }\n break;\n case \"WillPrintFinished\":\n this.#willPrintCapability?.resolve();\n this.#willPrintCapability = null;\n break;\n }\n return;\n }\n\n if (isInPresentationMode && detail.focus) {\n return;\n }\n delete detail.id;\n delete detail.siblings;\n\n const ids = siblings ? [id, ...siblings] : [id];\n for (const elementId of ids) {\n const element = document.querySelector(\n `[data-element-id=\"${elementId}\"]`\n );\n if (element) {\n element.dispatchEvent(new CustomEvent(\"updatefromsandbox\", { detail }));\n } else {\n // The element hasn't been rendered yet, use the AnnotationStorage.\n this.#pdfDocument?.annotationStorage.setValue(elementId, detail);\n }\n }\n }\n\n async #dispatchPageOpen(pageNumber, initialize = false) {\n const pdfDocument = this.#pdfDocument,\n visitedPages = this._visitedPages;\n\n if (initialize) {\n this.#closeCapability = Promise.withResolvers();\n }\n if (!this.#closeCapability) {\n return; // Scripting isn't fully initialized yet.\n }\n const pageView = this.#pdfViewer.getPageView(/* index = */ pageNumber - 1);\n\n if (pageView?.renderingState !== RenderingStates.FINISHED) {\n this._pageOpenPending.add(pageNumber);\n return; // Wait for the page to finish rendering.\n }\n this._pageOpenPending.delete(pageNumber);\n\n const actionsPromise = (async () => {\n // Avoid sending, and thus serializing, the `actions` data more than once.\n const actions = await (!visitedPages.has(pageNumber)\n ? pageView.pdfPage?.getJSActions()\n : null);\n if (pdfDocument !== this.#pdfDocument) {\n return; // The document was closed while the actions resolved.\n }\n\n await this.#scripting?.dispatchEventInSandbox({\n id: \"page\",\n name: \"PageOpen\",\n pageNumber,\n actions,\n });\n })();\n visitedPages.set(pageNumber, actionsPromise);\n }\n\n async #dispatchPageClose(pageNumber) {\n const pdfDocument = this.#pdfDocument,\n visitedPages = this._visitedPages;\n\n if (!this.#closeCapability) {\n return; // Scripting isn't fully initialized yet.\n }\n if (this._pageOpenPending.has(pageNumber)) {\n return; // The page is still rendering; no \"PageOpen\" event dispatched.\n }\n const actionsPromise = visitedPages.get(pageNumber);\n if (!actionsPromise) {\n return; // The \"PageClose\" event must be preceded by a \"PageOpen\" event.\n }\n visitedPages.set(pageNumber, null);\n\n // Ensure that the \"PageOpen\" event is dispatched first.\n await actionsPromise;\n if (pdfDocument !== this.#pdfDocument) {\n return; // The document was closed while the actions resolved.\n }\n\n await this.#scripting?.dispatchEventInSandbox({\n id: \"page\",\n name: \"PageClose\",\n pageNumber,\n });\n }\n\n #initScripting() {\n this.#destroyCapability = Promise.withResolvers();\n\n if (this.#scripting) {\n throw new Error(\"#initScripting: Scripting already exists.\");\n }\n return this.#externalServices.createScripting();\n }\n\n async #destroyScripting() {\n if (!this.#scripting) {\n this.#pdfDocument = null;\n\n this.#destroyCapability?.resolve();\n return;\n }\n if (this.#closeCapability) {\n await Promise.race([\n this.#closeCapability.promise,\n new Promise(resolve => {\n // Avoid the scripting/sandbox-destruction hanging indefinitely.\n setTimeout(resolve, 1000);\n }),\n ]).catch(() => {\n // Ignore any errors, to ensure that the sandbox is always destroyed.\n });\n this.#closeCapability = null;\n }\n this.#pdfDocument = null;\n\n try {\n await this.#scripting.destroySandbox();\n } catch {}\n\n this.#willPrintCapability?.reject(new Error(\"Scripting destroyed.\"));\n this.#willPrintCapability = null;\n\n this.#eventAbortController?.abort();\n this.#eventAbortController = null;\n\n this._pageOpenPending.clear();\n this._visitedPages.clear();\n\n this.#scripting = null;\n this.#ready = false;\n\n this.#destroyCapability?.resolve();\n }\n}\n\nexport { PDFScriptingManager };\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\n/** @typedef {import(\"./event_utils.js\").EventBus} EventBus */\n/** @typedef {import(\"./interfaces.js\").IL10n} IL10n */\n\nimport {\n docStyle,\n PresentationModeState,\n SidebarView,\n toggleCheckedBtn,\n toggleExpandedBtn,\n} from \"./ui_utils.js\";\n\nconst SIDEBAR_WIDTH_VAR = \"--sidebar-width\";\nconst SIDEBAR_MIN_WIDTH = 200; // pixels\nconst SIDEBAR_RESIZING_CLASS = \"sidebarResizing\";\nconst UI_NOTIFICATION_CLASS = \"pdfSidebarNotification\";\n\n/**\n * @typedef {Object} PDFSidebarOptions\n * @property {PDFSidebarElements} elements - The DOM elements.\n * @property {EventBus} eventBus - The application event bus.\n * @property {IL10n} l10n - The localization service.\n */\n\n/**\n * @typedef {Object} PDFSidebarElements\n * @property {HTMLDivElement} outerContainer - The outer container\n * (encasing both the viewer and sidebar elements).\n * @property {HTMLDivElement} sidebarContainer - The sidebar container\n * (in which the views are placed).\n * @property {HTMLButtonElement} toggleButton - The button used for\n * opening/closing the sidebar.\n * @property {HTMLDivElement} resizer - The DOM element that can be dragged in\n * order to adjust the width of the sidebar.\n * @property {HTMLButtonElement} thumbnailButton - The button used to show\n * the thumbnail view.\n * @property {HTMLButtonElement} outlineButton - The button used to show\n * the outline view.\n * @property {HTMLButtonElement} attachmentsButton - The button used to show\n * the attachments view.\n * @property {HTMLButtonElement} layersButton - The button used to show\n * the layers view.\n * @property {HTMLDivElement} thumbnailView - The container in which\n * the thumbnails are placed.\n * @property {HTMLDivElement} outlineView - The container in which\n * the outline is placed.\n * @property {HTMLDivElement} attachmentsView - The container in which\n * the attachments are placed.\n * @property {HTMLDivElement} layersView - The container in which\n * the layers are placed.\n * @property {HTMLButtonElement} currentOutlineItemButton - The button used to\n * find the current outline item.\n */\n\nclass PDFSidebar {\n #isRTL = false;\n\n #mouseMoveBound = this.#mouseMove.bind(this);\n\n #mouseUpBound = this.#mouseUp.bind(this);\n\n #outerContainerWidth = null;\n\n #width = null;\n\n /**\n * @param {PDFSidebarOptions} options\n */\n constructor({ elements, eventBus, l10n }) {\n this.isOpen = false;\n this.active = SidebarView.THUMBS;\n this.isInitialViewSet = false;\n this.isInitialEventDispatched = false;\n\n /**\n * Callback used when the sidebar has been opened/closed, to ensure that\n * the viewers (PDFViewer/PDFThumbnailViewer) are updated correctly.\n */\n this.onToggled = null;\n this.onUpdateThumbnails = null;\n\n this.outerContainer = elements.outerContainer;\n this.sidebarContainer = elements.sidebarContainer;\n this.toggleButton = elements.toggleButton;\n this.resizer = elements.resizer;\n\n this.thumbnailButton = elements.thumbnailButton;\n this.outlineButton = elements.outlineButton;\n this.attachmentsButton = elements.attachmentsButton;\n this.layersButton = elements.layersButton;\n\n this.thumbnailView = elements.thumbnailView;\n this.outlineView = elements.outlineView;\n this.attachmentsView = elements.attachmentsView;\n this.layersView = elements.layersView;\n\n this._currentOutlineItemButton = elements.currentOutlineItemButton;\n\n this.eventBus = eventBus;\n\n this.#isRTL = l10n.getDirection() === \"rtl\";\n this.#addEventListeners();\n }\n\n reset() {\n this.isInitialViewSet = false;\n this.isInitialEventDispatched = false;\n\n this.#hideUINotification(/* reset = */ true);\n this.switchView(SidebarView.THUMBS);\n\n this.outlineButton.disabled = false;\n this.attachmentsButton.disabled = false;\n this.layersButton.disabled = false;\n this._currentOutlineItemButton.disabled = true;\n }\n\n /**\n * @type {number} One of the values in {SidebarView}.\n */\n get visibleView() {\n return this.isOpen ? this.active : SidebarView.NONE;\n }\n\n /**\n * @param {number} view - The sidebar view that should become visible,\n * must be one of the values in {SidebarView}.\n */\n setInitialView(view = SidebarView.NONE) {\n if (this.isInitialViewSet) {\n return;\n }\n this.isInitialViewSet = true;\n\n // If the user has already manually opened the sidebar, immediately closing\n // it would be bad UX; also ignore the \"unknown\" sidebar view value.\n if (view === SidebarView.NONE || view === SidebarView.UNKNOWN) {\n this.#dispatchEvent();\n return;\n }\n this.switchView(view, /* forceOpen = */ true);\n\n // Prevent dispatching two back-to-back \"sidebarviewchanged\" events,\n // since `this.switchView` dispatched the event if the view changed.\n if (!this.isInitialEventDispatched) {\n this.#dispatchEvent();\n }\n }\n\n /**\n * @param {number} view - The sidebar view that should be switched to,\n * must be one of the values in {SidebarView}.\n * @param {boolean} [forceOpen] - Ensure that the sidebar is open.\n * The default value is `false`.\n */\n switchView(view, forceOpen = false) {\n const isViewChanged = view !== this.active;\n let forceRendering = false;\n\n switch (view) {\n case SidebarView.NONE:\n if (this.isOpen) {\n this.close();\n }\n return; // Closing will trigger rendering and dispatch the event.\n case SidebarView.THUMBS:\n if (this.isOpen && isViewChanged) {\n forceRendering = true;\n }\n break;\n case SidebarView.OUTLINE:\n if (this.outlineButton.disabled) {\n return;\n }\n break;\n case SidebarView.ATTACHMENTS:\n if (this.attachmentsButton.disabled) {\n return;\n }\n break;\n case SidebarView.LAYERS:\n if (this.layersButton.disabled) {\n return;\n }\n break;\n default:\n console.error(`PDFSidebar.switchView: \"${view}\" is not a valid view.`);\n return;\n }\n // Update the active view *after* it has been validated above,\n // in order to prevent setting it to an invalid state.\n this.active = view;\n\n // Update the CSS classes (and aria attributes), for all buttons and views.\n toggleCheckedBtn(\n this.thumbnailButton,\n view === SidebarView.THUMBS,\n this.thumbnailView\n );\n toggleCheckedBtn(\n this.outlineButton,\n view === SidebarView.OUTLINE,\n this.outlineView\n );\n toggleCheckedBtn(\n this.attachmentsButton,\n view === SidebarView.ATTACHMENTS,\n this.attachmentsView\n );\n toggleCheckedBtn(\n this.layersButton,\n view === SidebarView.LAYERS,\n this.layersView\n );\n\n if (forceOpen && !this.isOpen) {\n this.open();\n return; // Opening will trigger rendering and dispatch the event.\n }\n if (forceRendering) {\n this.onUpdateThumbnails();\n this.onToggled();\n }\n if (isViewChanged) {\n this.#dispatchEvent();\n }\n }\n\n open() {\n if (this.isOpen) {\n return;\n }\n this.isOpen = true;\n toggleExpandedBtn(this.toggleButton, true);\n\n this.outerContainer.classList.add(\"sidebarMoving\", \"sidebarOpen\");\n\n if (this.active === SidebarView.THUMBS) {\n this.onUpdateThumbnails();\n }\n this.onToggled();\n this.#dispatchEvent();\n\n this.#hideUINotification();\n }\n\n close(evt = null) {\n if (!this.isOpen) {\n return;\n }\n this.isOpen = false;\n toggleExpandedBtn(this.toggleButton, false);\n\n this.outerContainer.classList.add(\"sidebarMoving\");\n this.outerContainer.classList.remove(\"sidebarOpen\");\n\n this.onToggled();\n this.#dispatchEvent();\n\n if (evt?.detail > 0) {\n // Remove focus from the toggleButton if it's clicked (see issue 17361).\n this.toggleButton.blur();\n }\n }\n\n toggle(evt = null) {\n if (this.isOpen) {\n this.close(evt);\n } else {\n this.open();\n }\n }\n\n #dispatchEvent() {\n if (this.isInitialViewSet) {\n this.isInitialEventDispatched ||= true;\n }\n\n this.eventBus.dispatch(\"sidebarviewchanged\", {\n source: this,\n view: this.visibleView,\n });\n }\n\n #showUINotification() {\n this.toggleButton.setAttribute(\n \"data-l10n-id\",\n \"pdfjs-toggle-sidebar-notification-button\"\n );\n\n if (!this.isOpen) {\n // Only show the notification on the `toggleButton` if the sidebar is\n // currently closed, to avoid unnecessarily bothering the user.\n this.toggleButton.classList.add(UI_NOTIFICATION_CLASS);\n }\n }\n\n #hideUINotification(reset = false) {\n if (this.isOpen || reset) {\n // Only hide the notification on the `toggleButton` if the sidebar is\n // currently open, or when the current PDF document is being closed.\n this.toggleButton.classList.remove(UI_NOTIFICATION_CLASS);\n }\n\n if (reset) {\n this.toggleButton.setAttribute(\n \"data-l10n-id\",\n \"pdfjs-toggle-sidebar-button\"\n );\n }\n }\n\n #addEventListeners() {\n this.sidebarContainer.addEventListener(\"transitionend\", evt => {\n if (evt.target === this.sidebarContainer) {\n this.outerContainer.classList.remove(\"sidebarMoving\");\n // Ensure that rendering is triggered after opening/closing the sidebar.\n this.eventBus.dispatch(\"resize\", { source: this });\n }\n });\n\n this.toggleButton.addEventListener(\"click\", evt => {\n this.toggle(evt);\n });\n\n // Buttons for switching views.\n this.thumbnailButton.addEventListener(\"click\", () => {\n this.switchView(SidebarView.THUMBS);\n });\n\n this.outlineButton.addEventListener(\"click\", () => {\n this.switchView(SidebarView.OUTLINE);\n });\n this.outlineButton.addEventListener(\"dblclick\", () => {\n this.eventBus.dispatch(\"toggleoutlinetree\", { source: this });\n });\n\n this.attachmentsButton.addEventListener(\"click\", () => {\n this.switchView(SidebarView.ATTACHMENTS);\n });\n\n this.layersButton.addEventListener(\"click\", () => {\n this.switchView(SidebarView.LAYERS);\n });\n this.layersButton.addEventListener(\"dblclick\", () => {\n this.eventBus.dispatch(\"resetlayers\", { source: this });\n });\n\n // Buttons for view-specific options.\n this._currentOutlineItemButton.addEventListener(\"click\", () => {\n this.eventBus.dispatch(\"currentoutlineitem\", { source: this });\n });\n\n // Disable/enable views.\n const onTreeLoaded = (count, button, view) => {\n button.disabled = !count;\n\n if (count) {\n this.#showUINotification();\n } else if (this.active === view) {\n // If the `view` was opened by the user during document load,\n // switch away from it if it turns out to be empty.\n this.switchView(SidebarView.THUMBS);\n }\n };\n\n this.eventBus._on(\"outlineloaded\", evt => {\n onTreeLoaded(evt.outlineCount, this.outlineButton, SidebarView.OUTLINE);\n\n evt.currentOutlineItemPromise.then(enabled => {\n if (!this.isInitialViewSet) {\n return;\n }\n this._currentOutlineItemButton.disabled = !enabled;\n });\n });\n\n this.eventBus._on(\"attachmentsloaded\", evt => {\n onTreeLoaded(\n evt.attachmentsCount,\n this.attachmentsButton,\n SidebarView.ATTACHMENTS\n );\n });\n\n this.eventBus._on(\"layersloaded\", evt => {\n onTreeLoaded(evt.layersCount, this.layersButton, SidebarView.LAYERS);\n });\n\n // Update the thumbnailViewer, if visible, when exiting presentation mode.\n this.eventBus._on(\"presentationmodechanged\", evt => {\n if (\n evt.state === PresentationModeState.NORMAL &&\n this.visibleView === SidebarView.THUMBS\n ) {\n this.onUpdateThumbnails();\n }\n });\n\n // Handle resizing of the sidebar.\n this.resizer.addEventListener(\"mousedown\", evt => {\n if (evt.button !== 0) {\n return;\n }\n // Disable the `transition-duration` rules when sidebar resizing begins,\n // in order to improve responsiveness and to avoid visual glitches.\n this.outerContainer.classList.add(SIDEBAR_RESIZING_CLASS);\n\n window.addEventListener(\"mousemove\", this.#mouseMoveBound);\n window.addEventListener(\"mouseup\", this.#mouseUpBound);\n });\n\n this.eventBus._on(\"resize\", evt => {\n // When the *entire* viewer is resized, such that it becomes narrower,\n // ensure that the sidebar doesn't end up being too wide.\n if (evt.source !== window) {\n return;\n }\n // Always reset the cached width when the viewer is resized.\n this.#outerContainerWidth = null;\n\n if (!this.#width) {\n // The sidebar hasn't been resized, hence no need to adjust its width.\n return;\n }\n // NOTE: If the sidebar is closed, we don't need to worry about\n // visual glitches nor ensure that rendering is triggered.\n if (!this.isOpen) {\n this.#updateWidth(this.#width);\n return;\n }\n this.outerContainer.classList.add(SIDEBAR_RESIZING_CLASS);\n const updated = this.#updateWidth(this.#width);\n\n Promise.resolve().then(() => {\n this.outerContainer.classList.remove(SIDEBAR_RESIZING_CLASS);\n // Trigger rendering if the sidebar width changed, to avoid\n // depending on the order in which 'resize' events are handled.\n if (updated) {\n this.eventBus.dispatch(\"resize\", { source: this });\n }\n });\n });\n }\n\n /**\n * @type {number}\n */\n get outerContainerWidth() {\n return (this.#outerContainerWidth ||= this.outerContainer.clientWidth);\n }\n\n /**\n * returns {boolean} Indicating if the sidebar width was updated.\n */\n #updateWidth(width = 0) {\n // Prevent the sidebar from becoming too narrow, or from occupying more\n // than half of the available viewer width.\n const maxWidth = Math.floor(this.outerContainerWidth / 2);\n if (width > maxWidth) {\n width = maxWidth;\n }\n if (width < SIDEBAR_MIN_WIDTH) {\n width = SIDEBAR_MIN_WIDTH;\n }\n // Only update the UI when the sidebar width did in fact change.\n if (width === this.#width) {\n return false;\n }\n this.#width = width;\n\n docStyle.setProperty(SIDEBAR_WIDTH_VAR, `${width}px`);\n return true;\n }\n\n #mouseMove(evt) {\n let width = evt.clientX;\n // For sidebar resizing to work correctly in RTL mode, invert the width.\n if (this.#isRTL) {\n width = this.outerContainerWidth - width;\n }\n this.#updateWidth(width);\n }\n\n #mouseUp(evt) {\n // Re-enable the `transition-duration` rules when sidebar resizing ends...\n this.outerContainer.classList.remove(SIDEBAR_RESIZING_CLASS);\n // ... and ensure that rendering will always be triggered.\n this.eventBus.dispatch(\"resize\", { source: this });\n\n window.removeEventListener(\"mousemove\", this.#mouseMoveBound);\n window.removeEventListener(\"mouseup\", this.#mouseUpBound);\n }\n}\n\nexport { PDFSidebar };\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\n// eslint-disable-next-line max-len\n/** @typedef {import(\"../src/display/optional_content_config\").OptionalContentConfig} OptionalContentConfig */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"../src/display/display_utils\").PageViewport} PageViewport */\n/** @typedef {import(\"./event_utils\").EventBus} EventBus */\n/** @typedef {import(\"./interfaces\").IPDFLinkService} IPDFLinkService */\n/** @typedef {import(\"./interfaces\").IRenderableView} IRenderableView */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"./pdf_rendering_queue\").PDFRenderingQueue} PDFRenderingQueue */\n\nimport { OutputScale, RenderingStates } from \"./ui_utils.js\";\nimport { RenderingCancelledException } from \"pdfjs-lib\";\n\nconst DRAW_UPSCALE_FACTOR = 2; // See comment in `PDFThumbnailView.draw` below.\nconst MAX_NUM_SCALING_STEPS = 3;\nconst THUMBNAIL_WIDTH = 98; // px\n\n/**\n * @typedef {Object} PDFThumbnailViewOptions\n * @property {HTMLDivElement} container - The viewer element.\n * @property {EventBus} eventBus - The application event bus.\n * @property {number} id - The thumbnail's unique ID (normally its number).\n * @property {PageViewport} defaultViewport - The page viewport.\n * @property {Promise<OptionalContentConfig>} [optionalContentConfigPromise] -\n * A promise that is resolved with an {@link OptionalContentConfig} instance.\n * The default value is `null`.\n * @property {IPDFLinkService} linkService - The navigation/linking service.\n * @property {PDFRenderingQueue} renderingQueue - The rendering queue object.\n * @property {Object} [pageColors] - Overwrites background and foreground colors\n * with user defined ones in order to improve readability in high contrast\n * mode.\n */\n\nclass TempImageFactory {\n static #tempCanvas = null;\n\n static getCanvas(width, height) {\n const tempCanvas = (this.#tempCanvas ||= document.createElement(\"canvas\"));\n tempCanvas.width = width;\n tempCanvas.height = height;\n\n // Since this is a temporary canvas, we need to fill it with a white\n // background ourselves. `#getPageDrawContext` uses CSS rules for this.\n const ctx = tempCanvas.getContext(\"2d\", { alpha: false });\n ctx.save();\n ctx.fillStyle = \"rgb(255, 255, 255)\";\n ctx.fillRect(0, 0, width, height);\n ctx.restore();\n return [tempCanvas, tempCanvas.getContext(\"2d\")];\n }\n\n static destroyCanvas() {\n const tempCanvas = this.#tempCanvas;\n if (tempCanvas) {\n // Zeroing the width and height causes Firefox to release graphics\n // resources immediately, which can greatly reduce memory consumption.\n tempCanvas.width = 0;\n tempCanvas.height = 0;\n }\n this.#tempCanvas = null;\n }\n}\n\n/**\n * @implements {IRenderableView}\n */\nclass PDFThumbnailView {\n /**\n * @param {PDFThumbnailViewOptions} options\n */\n constructor({\n container,\n eventBus,\n id,\n defaultViewport,\n optionalContentConfigPromise,\n linkService,\n renderingQueue,\n pageColors,\n }) {\n this.id = id;\n this.renderingId = \"thumbnail\" + id;\n this.pageLabel = null;\n\n this.pdfPage = null;\n this.rotation = 0;\n this.viewport = defaultViewport;\n this.pdfPageRotate = defaultViewport.rotation;\n this._optionalContentConfigPromise = optionalContentConfigPromise || null;\n this.pageColors = pageColors || null;\n\n this.eventBus = eventBus;\n this.linkService = linkService;\n this.renderingQueue = renderingQueue;\n\n this.renderTask = null;\n this.renderingState = RenderingStates.INITIAL;\n this.resume = null;\n\n const anchor = document.createElement(\"a\");\n anchor.href = linkService.getAnchorUrl(\"#page=\" + id);\n anchor.setAttribute(\"data-l10n-id\", \"pdfjs-thumb-page-title\");\n anchor.setAttribute(\"data-l10n-args\", this.#pageL10nArgs);\n anchor.onclick = function () {\n linkService.goToPage(id);\n return false;\n };\n this.anchor = anchor;\n\n const div = document.createElement(\"div\");\n div.className = \"thumbnail\";\n div.setAttribute(\"data-page-number\", this.id);\n this.div = div;\n this.#updateDims();\n\n const img = document.createElement(\"div\");\n img.className = \"thumbnailImage\";\n this._placeholderImg = img;\n\n div.append(img);\n anchor.append(div);\n container.append(anchor);\n }\n\n #updateDims() {\n const { width, height } = this.viewport;\n const ratio = width / height;\n\n this.canvasWidth = THUMBNAIL_WIDTH;\n this.canvasHeight = (this.canvasWidth / ratio) | 0;\n this.scale = this.canvasWidth / width;\n\n const { style } = this.div;\n style.setProperty(\"--thumbnail-width\", `${this.canvasWidth}px`);\n style.setProperty(\"--thumbnail-height\", `${this.canvasHeight}px`);\n }\n\n setPdfPage(pdfPage) {\n this.pdfPage = pdfPage;\n this.pdfPageRotate = pdfPage.rotate;\n const totalRotation = (this.rotation + this.pdfPageRotate) % 360;\n this.viewport = pdfPage.getViewport({ scale: 1, rotation: totalRotation });\n this.reset();\n }\n\n reset() {\n this.cancelRendering();\n this.renderingState = RenderingStates.INITIAL;\n\n this.div.removeAttribute(\"data-loaded\");\n this.image?.replaceWith(this._placeholderImg);\n this.#updateDims();\n\n if (this.image) {\n this.image.removeAttribute(\"src\");\n delete this.image;\n }\n }\n\n update({ rotation = null }) {\n if (typeof rotation === \"number\") {\n this.rotation = rotation; // The rotation may be zero.\n }\n const totalRotation = (this.rotation + this.pdfPageRotate) % 360;\n this.viewport = this.viewport.clone({\n scale: 1,\n rotation: totalRotation,\n });\n this.reset();\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() {\n if (this.renderTask) {\n this.renderTask.cancel();\n this.renderTask = null;\n }\n this.resume = null;\n }\n\n #getPageDrawContext(upscaleFactor = 1) {\n // Keep the no-thumbnail outline visible, i.e. `data-loaded === false`,\n // until rendering/image conversion is complete, to avoid display issues.\n const canvas = document.createElement(\"canvas\");\n const ctx = canvas.getContext(\"2d\", { alpha: false });\n const outputScale = new OutputScale();\n\n canvas.width = (upscaleFactor * this.canvasWidth * outputScale.sx) | 0;\n canvas.height = (upscaleFactor * this.canvasHeight * outputScale.sy) | 0;\n\n const transform = outputScale.scaled\n ? [outputScale.sx, 0, 0, outputScale.sy, 0, 0]\n : null;\n\n return { ctx, canvas, transform };\n }\n\n #convertCanvasToImage(canvas) {\n if (this.renderingState !== RenderingStates.FINISHED) {\n throw new Error(\"#convertCanvasToImage: Rendering has not finished.\");\n }\n const reducedCanvas = this.#reduceImage(canvas);\n\n const image = document.createElement(\"img\");\n image.className = \"thumbnailImage\";\n image.setAttribute(\"data-l10n-id\", \"pdfjs-thumb-page-canvas\");\n image.setAttribute(\"data-l10n-args\", this.#pageL10nArgs);\n image.src = reducedCanvas.toDataURL();\n this.image = image;\n\n this.div.setAttribute(\"data-loaded\", true);\n this._placeholderImg.replaceWith(image);\n\n // Zeroing the width and height causes Firefox to release graphics\n // resources immediately, which can greatly reduce memory consumption.\n reducedCanvas.width = 0;\n reducedCanvas.height = 0;\n }\n\n async #finishRenderTask(renderTask, canvas, error = null) {\n // The renderTask may have been replaced by a new one, so only remove\n // the reference to the renderTask if it matches the one that is\n // triggering this callback.\n if (renderTask === this.renderTask) {\n this.renderTask = null;\n }\n\n if (error instanceof RenderingCancelledException) {\n return;\n }\n this.renderingState = RenderingStates.FINISHED;\n this.#convertCanvasToImage(canvas);\n\n if (error) {\n throw error;\n }\n }\n\n async draw() {\n if (this.renderingState !== RenderingStates.INITIAL) {\n console.error(\"Must be in new state before drawing\");\n return undefined;\n }\n const { pdfPage } = this;\n\n if (!pdfPage) {\n this.renderingState = RenderingStates.FINISHED;\n throw new Error(\"pdfPage is not loaded\");\n }\n\n this.renderingState = RenderingStates.RUNNING;\n\n // Render the thumbnail at a larger size and downsize the canvas (similar\n // to `setImage`), to improve consistency between thumbnails created by\n // the `draw` and `setImage` methods (fixes issue 8233).\n // NOTE: To primarily avoid increasing memory usage too much, but also to\n // reduce downsizing overhead, we purposely limit the up-scaling factor.\n const { ctx, canvas, transform } =\n this.#getPageDrawContext(DRAW_UPSCALE_FACTOR);\n const drawViewport = this.viewport.clone({\n scale: DRAW_UPSCALE_FACTOR * this.scale,\n });\n const 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 const renderContext = {\n canvasContext: ctx,\n transform,\n viewport: drawViewport,\n optionalContentConfigPromise: this._optionalContentConfigPromise,\n pageColors: this.pageColors,\n };\n const renderTask = (this.renderTask = pdfPage.render(renderContext));\n renderTask.onContinue = renderContinueCallback;\n\n const resultPromise = renderTask.promise.then(\n () => this.#finishRenderTask(renderTask, canvas),\n error => this.#finishRenderTask(renderTask, canvas, error)\n );\n resultPromise.finally(() => {\n // Zeroing the width and height causes Firefox to release graphics\n // resources immediately, which can greatly reduce memory consumption.\n canvas.width = 0;\n canvas.height = 0;\n\n this.eventBus.dispatch(\"thumbnailrendered\", {\n source: this,\n pageNumber: this.id,\n pdfPage: this.pdfPage,\n });\n });\n\n return resultPromise;\n }\n\n setImage(pageView) {\n if (this.renderingState !== RenderingStates.INITIAL) {\n return;\n }\n const { thumbnailCanvas: canvas, pdfPage, scale } = pageView;\n if (!canvas) {\n return;\n }\n if (!this.pdfPage) {\n this.setPdfPage(pdfPage);\n }\n if (scale < this.scale) {\n // Avoid upscaling the image, since that makes the thumbnail look blurry.\n return;\n }\n this.renderingState = RenderingStates.FINISHED;\n this.#convertCanvasToImage(canvas);\n }\n\n #reduceImage(img) {\n const { ctx, canvas } = this.#getPageDrawContext();\n\n if (img.width <= 2 * canvas.width) {\n ctx.drawImage(\n img,\n 0,\n 0,\n img.width,\n img.height,\n 0,\n 0,\n canvas.width,\n canvas.height\n );\n return canvas;\n }\n // drawImage does an awful job of rescaling the image, doing it gradually.\n let reducedWidth = canvas.width << MAX_NUM_SCALING_STEPS;\n let reducedHeight = canvas.height << MAX_NUM_SCALING_STEPS;\n const [reducedImage, reducedImageCtx] = TempImageFactory.getCanvas(\n reducedWidth,\n reducedHeight\n );\n\n while (reducedWidth > img.width || reducedHeight > img.height) {\n reducedWidth >>= 1;\n reducedHeight >>= 1;\n }\n reducedImageCtx.drawImage(\n img,\n 0,\n 0,\n img.width,\n img.height,\n 0,\n 0,\n reducedWidth,\n reducedHeight\n );\n while (reducedWidth > 2 * canvas.width) {\n reducedImageCtx.drawImage(\n reducedImage,\n 0,\n 0,\n reducedWidth,\n reducedHeight,\n 0,\n 0,\n reducedWidth >> 1,\n reducedHeight >> 1\n );\n reducedWidth >>= 1;\n reducedHeight >>= 1;\n }\n ctx.drawImage(\n reducedImage,\n 0,\n 0,\n reducedWidth,\n reducedHeight,\n 0,\n 0,\n canvas.width,\n canvas.height\n );\n return canvas;\n }\n\n get #pageL10nArgs() {\n return JSON.stringify({ page: this.pageLabel ?? this.id });\n }\n\n /**\n * @param {string|null} label\n */\n setPageLabel(label) {\n this.pageLabel = typeof label === \"string\" ? label : null;\n\n this.anchor.setAttribute(\"data-l10n-args\", this.#pageL10nArgs);\n\n if (this.renderingState !== RenderingStates.FINISHED) {\n return;\n }\n this.image?.setAttribute(\"data-l10n-args\", this.#pageL10nArgs);\n }\n}\n\nexport { PDFThumbnailView, TempImageFactory };\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\n/** @typedef {import(\"../src/display/api\").PDFDocumentProxy} PDFDocumentProxy */\n/** @typedef {import(\"../src/display/api\").PDFPageProxy} PDFPageProxy */\n/** @typedef {import(\"./event_utils\").EventBus} EventBus */\n/** @typedef {import(\"./interfaces\").IPDFLinkService} IPDFLinkService */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"./pdf_rendering_queue\").PDFRenderingQueue} PDFRenderingQueue */\n\nimport {\n getVisibleElements,\n isValidRotation,\n RenderingStates,\n scrollIntoView,\n watchScroll,\n} from \"./ui_utils.js\";\nimport { PDFThumbnailView, TempImageFactory } from \"./pdf_thumbnail_view.js\";\n\nconst THUMBNAIL_SCROLL_MARGIN = -19;\nconst THUMBNAIL_SELECTED_CLASS = \"selected\";\n\n/**\n * @typedef {Object} PDFThumbnailViewerOptions\n * @property {HTMLDivElement} container - The container for the thumbnail\n * elements.\n * @property {EventBus} eventBus - The application event bus.\n * @property {IPDFLinkService} linkService - The navigation/linking service.\n * @property {PDFRenderingQueue} renderingQueue - The rendering queue object.\n * @property {Object} [pageColors] - Overwrites background and foreground colors\n * with user defined ones in order to improve readability in high contrast\n * mode.\n */\n\n/**\n * Viewer control to display thumbnails for pages in a PDF document.\n */\nclass PDFThumbnailViewer {\n /**\n * @param {PDFThumbnailViewerOptions} options\n */\n constructor({\n container,\n eventBus,\n linkService,\n renderingQueue,\n pageColors,\n }) {\n this.container = container;\n this.eventBus = eventBus;\n this.linkService = linkService;\n this.renderingQueue = renderingQueue;\n this.pageColors = pageColors || null;\n\n this.scroll = watchScroll(this.container, this.#scrollUpdated.bind(this));\n this.#resetView();\n }\n\n #scrollUpdated() {\n this.renderingQueue.renderHighestPriority();\n }\n\n getThumbnail(index) {\n return this._thumbnails[index];\n }\n\n #getVisibleThumbs() {\n return getVisibleElements({\n scrollEl: this.container,\n views: this._thumbnails,\n });\n }\n\n scrollThumbnailIntoView(pageNumber) {\n if (!this.pdfDocument) {\n return;\n }\n const thumbnailView = this._thumbnails[pageNumber - 1];\n\n if (!thumbnailView) {\n console.error('scrollThumbnailIntoView: Invalid \"pageNumber\" parameter.');\n return;\n }\n\n if (pageNumber !== this._currentPageNumber) {\n const prevThumbnailView = this._thumbnails[this._currentPageNumber - 1];\n // Remove the highlight from the previous thumbnail...\n prevThumbnailView.div.classList.remove(THUMBNAIL_SELECTED_CLASS);\n // ... and add the highlight to the new thumbnail.\n thumbnailView.div.classList.add(THUMBNAIL_SELECTED_CLASS);\n }\n const { first, last, views } = this.#getVisibleThumbs();\n\n // If the thumbnail isn't currently visible, scroll it into view.\n if (views.length > 0) {\n let shouldScroll = false;\n if (pageNumber <= first.id || pageNumber >= last.id) {\n shouldScroll = true;\n } else {\n for (const { id, percent } of views) {\n if (id !== pageNumber) {\n continue;\n }\n shouldScroll = percent < 100;\n break;\n }\n }\n if (shouldScroll) {\n scrollIntoView(thumbnailView.div, { top: THUMBNAIL_SCROLL_MARGIN });\n }\n }\n\n this._currentPageNumber = pageNumber;\n }\n\n get pagesRotation() {\n return this._pagesRotation;\n }\n\n set pagesRotation(rotation) {\n if (!isValidRotation(rotation)) {\n throw new Error(\"Invalid thumbnails 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 const updateArgs = { rotation };\n for (const thumbnail of this._thumbnails) {\n thumbnail.update(updateArgs);\n }\n }\n\n cleanup() {\n for (const thumbnail of this._thumbnails) {\n if (thumbnail.renderingState !== RenderingStates.FINISHED) {\n thumbnail.reset();\n }\n }\n TempImageFactory.destroyCanvas();\n }\n\n #resetView() {\n this._thumbnails = [];\n this._currentPageNumber = 1;\n this._pageLabels = null;\n this._pagesRotation = 0;\n\n // Remove the thumbnails from the DOM.\n this.container.textContent = \"\";\n }\n\n /**\n * @param {PDFDocumentProxy} 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 const firstPagePromise = pdfDocument.getPage(1);\n const optionalContentConfigPromise = pdfDocument.getOptionalContentConfig({\n intent: \"display\",\n });\n\n firstPagePromise\n .then(firstPdfPage => {\n const pagesCount = pdfDocument.numPages;\n const viewport = firstPdfPage.getViewport({ scale: 1 });\n\n for (let pageNum = 1; pageNum <= pagesCount; ++pageNum) {\n const thumbnail = new PDFThumbnailView({\n container: this.container,\n eventBus: this.eventBus,\n id: pageNum,\n defaultViewport: viewport.clone(),\n optionalContentConfigPromise,\n linkService: this.linkService,\n renderingQueue: this.renderingQueue,\n pageColors: this.pageColors,\n });\n this._thumbnails.push(thumbnail);\n }\n // Set the first `pdfPage` immediately, since it's already loaded,\n // rather than having to repeat the `PDFDocumentProxy.getPage` call in\n // the `this.#ensurePdfPageLoaded` method before rendering can start.\n this._thumbnails[0]?.setPdfPage(firstPdfPage);\n\n // Ensure that the current thumbnail is always highlighted on load.\n const thumbnailView = this._thumbnails[this._currentPageNumber - 1];\n thumbnailView.div.classList.add(THUMBNAIL_SELECTED_CLASS);\n })\n .catch(reason => {\n console.error(\"Unable to initialize thumbnail viewer\", reason);\n });\n }\n\n #cancelRendering() {\n for (const thumbnail of this._thumbnails) {\n thumbnail.cancelRendering();\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 (\n !(Array.isArray(labels) && this.pdfDocument.numPages === labels.length)\n ) {\n this._pageLabels = null;\n console.error(\"PDFThumbnailViewer_setPageLabels: Invalid page labels.\");\n } else {\n this._pageLabels = labels;\n }\n // Update all the `PDFThumbnailView` instances.\n for (let i = 0, ii = this._thumbnails.length; i < ii; i++) {\n this._thumbnails[i].setPageLabel(this._pageLabels?.[i] ?? null);\n }\n }\n\n /**\n * @param {PDFThumbnailView} thumbView\n * @returns {Promise<PDFPageProxy | null>}\n */\n async #ensurePdfPageLoaded(thumbView) {\n if (thumbView.pdfPage) {\n return thumbView.pdfPage;\n }\n try {\n const pdfPage = await this.pdfDocument.getPage(thumbView.id);\n if (!thumbView.pdfPage) {\n thumbView.setPdfPage(pdfPage);\n }\n return pdfPage;\n } catch (reason) {\n console.error(\"Unable to get page for thumb view\", reason);\n return null; // Page error -- there is nothing that can be done.\n }\n }\n\n #getScrollAhead(visible) {\n if (visible.first?.id === 1) {\n return true;\n } else if (visible.last?.id === this._thumbnails.length) {\n return false;\n }\n return this.scroll.down;\n }\n\n forceRendering() {\n const visibleThumbs = this.#getVisibleThumbs();\n const scrollAhead = this.#getScrollAhead(visibleThumbs);\n const thumbView = this.renderingQueue.getHighestPriority(\n visibleThumbs,\n this._thumbnails,\n scrollAhead\n );\n if (thumbView) {\n this.#ensurePdfPageLoaded(thumbView).then(() => {\n this.renderingQueue.renderView(thumbView);\n });\n return true;\n }\n return false;\n }\n}\n\nexport { PDFThumbnailViewer };\n","/* Copyright 2022 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\n/** @typedef {import(\"../src/display/api\").PDFPageProxy} PDFPageProxy */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"../src/display/display_utils\").PageViewport} PageViewport */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"../src/display/editor/tools.js\").AnnotationEditorUIManager} AnnotationEditorUIManager */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"./text_accessibility.js\").TextAccessibilityManager} TextAccessibilityManager */\n/** @typedef {import(\"./interfaces\").IL10n} IL10n */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"../src/display/annotation_layer.js\").AnnotationLayer} AnnotationLayer */\n\nimport { AnnotationEditorLayer } from \"pdfjs-lib\";\nimport { GenericL10n } from \"web-null_l10n\";\n\n/**\n * @typedef {Object} AnnotationEditorLayerBuilderOptions\n * @property {AnnotationEditorUIManager} [uiManager]\n * @property {PDFPageProxy} pdfPage\n * @property {IL10n} [l10n]\n * @property {TextAccessibilityManager} [accessibilityManager]\n * @property {AnnotationLayer} [annotationLayer]\n * @property {TextLayer} [textLayer]\n * @property {DrawLayer} [drawLayer]\n * @property {function} [onAppend]\n */\n\nclass AnnotationEditorLayerBuilder {\n #annotationLayer = null;\n\n #drawLayer = null;\n\n #onAppend = null;\n\n #textLayer = null;\n\n #uiManager;\n\n /**\n * @param {AnnotationEditorLayerBuilderOptions} options\n */\n constructor(options) {\n this.pdfPage = options.pdfPage;\n this.accessibilityManager = options.accessibilityManager;\n this.l10n = options.l10n;\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n this.l10n ||= new GenericL10n();\n }\n this.annotationEditorLayer = null;\n this.div = null;\n this._cancelled = false;\n this.#uiManager = options.uiManager;\n this.#annotationLayer = options.annotationLayer || null;\n this.#textLayer = options.textLayer || null;\n this.#drawLayer = options.drawLayer || null;\n this.#onAppend = options.onAppend || null;\n }\n\n /**\n * @param {PageViewport} viewport\n * @param {string} intent (default value is 'display')\n */\n async render(viewport, intent = \"display\") {\n if (intent !== \"display\") {\n return;\n }\n\n if (this._cancelled) {\n return;\n }\n\n const clonedViewport = viewport.clone({ dontFlip: true });\n if (this.div) {\n this.annotationEditorLayer.update({ viewport: clonedViewport });\n this.show();\n return;\n }\n\n // Create an AnnotationEditor layer div\n const div = (this.div = document.createElement(\"div\"));\n div.className = \"annotationEditorLayer\";\n div.hidden = true;\n div.dir = this.#uiManager.direction;\n this.#onAppend?.(div);\n\n this.annotationEditorLayer = new AnnotationEditorLayer({\n uiManager: this.#uiManager,\n div,\n accessibilityManager: this.accessibilityManager,\n pageIndex: this.pdfPage.pageNumber - 1,\n l10n: this.l10n,\n viewport: clonedViewport,\n annotationLayer: this.#annotationLayer,\n textLayer: this.#textLayer,\n drawLayer: this.#drawLayer,\n });\n\n const parameters = {\n viewport: clonedViewport,\n div,\n annotations: null,\n intent,\n };\n\n this.annotationEditorLayer.render(parameters);\n this.show();\n }\n\n cancel() {\n this._cancelled = true;\n\n if (!this.div) {\n return;\n }\n this.annotationEditorLayer.destroy();\n }\n\n hide() {\n if (!this.div) {\n return;\n }\n this.div.hidden = true;\n }\n\n show() {\n if (!this.div || this.annotationEditorLayer.isInvisible) {\n return;\n }\n this.div.hidden = false;\n }\n}\n\nexport { AnnotationEditorLayerBuilder };\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\n/** @typedef {import(\"../src/display/api\").PDFPageProxy} PDFPageProxy */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"../src/display/display_utils\").PageViewport} PageViewport */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"../src/display/annotation_storage\").AnnotationStorage} AnnotationStorage */\n/** @typedef {import(\"./interfaces\").IDownloadManager} IDownloadManager */\n/** @typedef {import(\"./interfaces\").IPDFLinkService} IPDFLinkService */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"./text_accessibility.js\").TextAccessibilityManager} TextAccessibilityManager */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"../src/display/editor/tools.js\").AnnotationEditorUIManager} AnnotationEditorUIManager */\n\nimport { AnnotationLayer } from \"pdfjs-lib\";\nimport { PresentationModeState } from \"./ui_utils.js\";\n\n/**\n * @typedef {Object} AnnotationLayerBuilderOptions\n * @property {PDFPageProxy} pdfPage\n * @property {AnnotationStorage} [annotationStorage]\n * @property {string} [imageResourcesPath] - Path for image resources, mainly\n * for annotation icons. Include trailing slash.\n * @property {boolean} renderForms\n * @property {IPDFLinkService} linkService\n * @property {IDownloadManager} [downloadManager]\n * @property {boolean} [enableScripting]\n * @property {Promise<boolean>} [hasJSActionsPromise]\n * @property {Promise<Object<string, Array<Object>> | null>}\n * [fieldObjectsPromise]\n * @property {Map<string, HTMLCanvasElement>} [annotationCanvasMap]\n * @property {TextAccessibilityManager} [accessibilityManager]\n * @property {AnnotationEditorUIManager} [annotationEditorUIManager]\n * @property {function} [onAppend]\n */\n\nclass AnnotationLayerBuilder {\n #onAppend = null;\n\n #eventAbortController = null;\n\n /**\n * @param {AnnotationLayerBuilderOptions} options\n */\n constructor({\n pdfPage,\n linkService,\n downloadManager,\n annotationStorage = null,\n imageResourcesPath = \"\",\n renderForms = true,\n enableScripting = false,\n hasJSActionsPromise = null,\n fieldObjectsPromise = null,\n annotationCanvasMap = null,\n accessibilityManager = null,\n annotationEditorUIManager = null,\n onAppend = null,\n }) {\n this.pdfPage = pdfPage;\n this.linkService = linkService;\n this.downloadManager = downloadManager;\n this.imageResourcesPath = imageResourcesPath;\n this.renderForms = renderForms;\n this.annotationStorage = annotationStorage;\n this.enableScripting = enableScripting;\n this._hasJSActionsPromise = hasJSActionsPromise || Promise.resolve(false);\n this._fieldObjectsPromise = fieldObjectsPromise || Promise.resolve(null);\n this._annotationCanvasMap = annotationCanvasMap;\n this._accessibilityManager = accessibilityManager;\n this._annotationEditorUIManager = annotationEditorUIManager;\n this.#onAppend = onAppend;\n\n this.annotationLayer = null;\n this.div = null;\n this._cancelled = false;\n this._eventBus = linkService.eventBus;\n }\n\n /**\n * @param {PageViewport} viewport\n * @param {string} intent (default value is 'display')\n * @returns {Promise<void>} A promise that is resolved when rendering of the\n * annotations is complete.\n */\n async render(viewport, intent = \"display\") {\n if (this.div) {\n if (this._cancelled || !this.annotationLayer) {\n return;\n }\n // If an annotationLayer already exists, refresh its children's\n // transformation matrices.\n this.annotationLayer.update({\n viewport: viewport.clone({ dontFlip: true }),\n });\n return;\n }\n\n const [annotations, hasJSActions, fieldObjects] = await Promise.all([\n this.pdfPage.getAnnotations({ intent }),\n this._hasJSActionsPromise,\n this._fieldObjectsPromise,\n ]);\n if (this._cancelled) {\n return;\n }\n\n // Create an annotation layer div and render the annotations\n // if there is at least one annotation.\n const div = (this.div = document.createElement(\"div\"));\n div.className = \"annotationLayer\";\n this.#onAppend?.(div);\n\n if (annotations.length === 0) {\n this.hide();\n return;\n }\n\n this.annotationLayer = new AnnotationLayer({\n div,\n accessibilityManager: this._accessibilityManager,\n annotationCanvasMap: this._annotationCanvasMap,\n annotationEditorUIManager: this._annotationEditorUIManager,\n page: this.pdfPage,\n viewport: viewport.clone({ dontFlip: true }),\n });\n\n await this.annotationLayer.render({\n annotations,\n imageResourcesPath: this.imageResourcesPath,\n renderForms: this.renderForms,\n linkService: this.linkService,\n downloadManager: this.downloadManager,\n annotationStorage: this.annotationStorage,\n enableScripting: this.enableScripting,\n hasJSActions,\n fieldObjects,\n });\n\n // Ensure that interactive form elements in the annotationLayer are\n // disabled while PresentationMode is active (see issue 12232).\n if (this.linkService.isInPresentationMode) {\n this.#updatePresentationModeState(PresentationModeState.FULLSCREEN);\n }\n if (!this.#eventAbortController) {\n this.#eventAbortController = new AbortController();\n\n this._eventBus?._on(\n \"presentationmodechanged\",\n evt => {\n this.#updatePresentationModeState(evt.state);\n },\n { signal: this.#eventAbortController.signal }\n );\n }\n }\n\n cancel() {\n this._cancelled = true;\n\n this.#eventAbortController?.abort();\n this.#eventAbortController = null;\n }\n\n hide() {\n if (!this.div) {\n return;\n }\n this.div.hidden = true;\n }\n\n #updatePresentationModeState(state) {\n if (!this.div) {\n return;\n }\n let disableFormElements = false;\n\n switch (state) {\n case PresentationModeState.FULLSCREEN:\n disableFormElements = true;\n break;\n case PresentationModeState.NORMAL:\n break;\n default:\n return;\n }\n for (const section of this.div.childNodes) {\n if (section.hasAttribute(\"data-internal-link\")) {\n continue;\n }\n section.inert = disableFormElements;\n }\n }\n}\n\nexport { AnnotationLayerBuilder };\n","/* Copyright 2022 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 { DrawLayer } from \"pdfjs-lib\";\n\n/**\n * @typedef {Object} DrawLayerBuilderOptions\n * @property {number} pageIndex\n */\n\nclass DrawLayerBuilder {\n #drawLayer = null;\n\n /**\n * @param {DrawLayerBuilderOptions} options\n */\n constructor(options) {\n this.pageIndex = options.pageIndex;\n }\n\n /**\n * @param {string} intent (default value is 'display')\n */\n async render(intent = \"display\") {\n if (intent !== \"display\" || this.#drawLayer || this._cancelled) {\n return;\n }\n this.#drawLayer = new DrawLayer({\n pageIndex: this.pageIndex,\n });\n }\n\n cancel() {\n this._cancelled = true;\n\n if (!this.#drawLayer) {\n return;\n }\n this.#drawLayer.destroy();\n this.#drawLayer = null;\n }\n\n setParent(parent) {\n this.#drawLayer?.setParent(parent);\n }\n\n getDrawLayer() {\n return this.#drawLayer;\n }\n}\n\nexport { DrawLayerBuilder };\n","/* Copyright 2021 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 { removeNullCharacters } from \"./ui_utils.js\";\n\nconst PDF_ROLE_TO_HTML_ROLE = {\n // Document level structure types\n Document: null, // There's a \"document\" role, but it doesn't make sense here.\n DocumentFragment: null,\n // Grouping level structure types\n Part: \"group\",\n Sect: \"group\", // XXX: There's a \"section\" role, but it's abstract.\n Div: \"group\",\n Aside: \"note\",\n NonStruct: \"none\",\n // Block level structure types\n P: null,\n // H<n>,\n H: \"heading\",\n Title: null,\n FENote: \"note\",\n // Sub-block level structure type\n Sub: \"group\",\n // General inline level structure types\n Lbl: null,\n Span: null,\n Em: null,\n Strong: null,\n Link: \"link\",\n Annot: \"note\",\n Form: \"form\",\n // Ruby and Warichu structure types\n Ruby: null,\n RB: null,\n RT: null,\n RP: null,\n Warichu: null,\n WT: null,\n WP: null,\n // List standard structure types\n L: \"list\",\n LI: \"listitem\",\n LBody: null,\n // Table standard structure types\n Table: \"table\",\n TR: \"row\",\n TH: \"columnheader\",\n TD: \"cell\",\n THead: \"columnheader\",\n TBody: null,\n TFoot: null,\n // Standard structure type Caption\n Caption: null,\n // Standard structure type Figure\n Figure: \"figure\",\n // Standard structure type Formula\n Formula: null,\n // standard structure type Artifact\n Artifact: null,\n};\n\nconst HEADING_PATTERN = /^H(\\d+)$/;\n\nclass StructTreeLayerBuilder {\n #treeDom = undefined;\n\n get renderingDone() {\n return this.#treeDom !== undefined;\n }\n\n render(structTree) {\n if (this.#treeDom !== undefined) {\n return this.#treeDom;\n }\n const treeDom = this.#walk(structTree);\n treeDom?.classList.add(\"structTree\");\n return (this.#treeDom = treeDom);\n }\n\n hide() {\n if (this.#treeDom && !this.#treeDom.hidden) {\n this.#treeDom.hidden = true;\n }\n }\n\n show() {\n if (this.#treeDom?.hidden) {\n this.#treeDom.hidden = false;\n }\n }\n\n #setAttributes(structElement, htmlElement) {\n const { alt, id, lang } = structElement;\n if (alt !== undefined) {\n htmlElement.setAttribute(\"aria-label\", removeNullCharacters(alt));\n }\n if (id !== undefined) {\n htmlElement.setAttribute(\"aria-owns\", id);\n }\n if (lang !== undefined) {\n htmlElement.setAttribute(\n \"lang\",\n removeNullCharacters(lang, /* replaceInvisible = */ true)\n );\n }\n }\n\n #walk(node) {\n if (!node) {\n return null;\n }\n\n const element = document.createElement(\"span\");\n if (\"role\" in node) {\n const { role } = node;\n const match = role.match(HEADING_PATTERN);\n if (match) {\n element.setAttribute(\"role\", \"heading\");\n element.setAttribute(\"aria-level\", match[1]);\n } else if (PDF_ROLE_TO_HTML_ROLE[role]) {\n element.setAttribute(\"role\", PDF_ROLE_TO_HTML_ROLE[role]);\n }\n }\n\n this.#setAttributes(node, element);\n\n if (node.children) {\n if (node.children.length === 1 && \"id\" in node.children[0]) {\n // Often there is only one content node so just set the values on the\n // parent node to avoid creating an extra span.\n this.#setAttributes(node.children[0], element);\n } else {\n for (const kid of node.children) {\n element.append(this.#walk(kid));\n }\n }\n }\n return element;\n }\n}\n\nexport { StructTreeLayerBuilder };\n","/* Copyright 2022 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 { binarySearchFirstItem } from \"./ui_utils.js\";\n\n/**\n * This class aims to provide some methods:\n * - to reorder elements in the DOM with respect to the visual order;\n * - to create a link, using aria-owns, between spans in the textLayer and\n * annotations in the annotationLayer. The goal is to help to know\n * where the annotations are in the text flow.\n */\nclass TextAccessibilityManager {\n #enabled = false;\n\n #textChildren = null;\n\n #textNodes = new Map();\n\n #waitingElements = new Map();\n\n setTextMapping(textDivs) {\n this.#textChildren = textDivs;\n }\n\n /**\n * Compare the positions of two elements, it must correspond to\n * the visual ordering.\n *\n * @param {HTMLElement} e1\n * @param {HTMLElement} e2\n * @returns {number}\n */\n static #compareElementPositions(e1, e2) {\n const rect1 = e1.getBoundingClientRect();\n const rect2 = e2.getBoundingClientRect();\n\n if (rect1.width === 0 && rect1.height === 0) {\n return +1;\n }\n\n if (rect2.width === 0 && rect2.height === 0) {\n return -1;\n }\n\n const top1 = rect1.y;\n const bot1 = rect1.y + rect1.height;\n const mid1 = rect1.y + rect1.height / 2;\n\n const top2 = rect2.y;\n const bot2 = rect2.y + rect2.height;\n const mid2 = rect2.y + rect2.height / 2;\n\n if (mid1 <= top2 && mid2 >= bot1) {\n return -1;\n }\n\n if (mid2 <= top1 && mid1 >= bot2) {\n return +1;\n }\n\n const centerX1 = rect1.x + rect1.width / 2;\n const centerX2 = rect2.x + rect2.width / 2;\n\n return centerX1 - centerX2;\n }\n\n /**\n * Function called when the text layer has finished rendering.\n */\n enable() {\n if (this.#enabled) {\n throw new Error(\"TextAccessibilityManager is already enabled.\");\n }\n if (!this.#textChildren) {\n throw new Error(\"Text divs and strings have not been set.\");\n }\n\n this.#enabled = true;\n this.#textChildren = this.#textChildren.slice();\n this.#textChildren.sort(TextAccessibilityManager.#compareElementPositions);\n\n if (this.#textNodes.size > 0) {\n // Some links have been made before this manager has been disabled, hence\n // we restore them.\n const textChildren = this.#textChildren;\n for (const [id, nodeIndex] of this.#textNodes) {\n const element = document.getElementById(id);\n if (!element) {\n // If the page was *fully* reset the element no longer exists, and it\n // will be re-inserted later (i.e. when the annotationLayer renders).\n this.#textNodes.delete(id);\n continue;\n }\n this.#addIdToAriaOwns(id, textChildren[nodeIndex]);\n }\n }\n\n for (const [element, isRemovable] of this.#waitingElements) {\n this.addPointerInTextLayer(element, isRemovable);\n }\n this.#waitingElements.clear();\n }\n\n disable() {\n if (!this.#enabled) {\n return;\n }\n\n // Don't clear this.#textNodes which is used to rebuild the aria-owns\n // in case it's re-enabled at some point.\n\n this.#waitingElements.clear();\n this.#textChildren = null;\n this.#enabled = false;\n }\n\n /**\n * Remove an aria-owns id from a node in the text layer.\n * @param {HTMLElement} element\n */\n removePointerInTextLayer(element) {\n if (!this.#enabled) {\n this.#waitingElements.delete(element);\n return;\n }\n\n const children = this.#textChildren;\n if (!children || children.length === 0) {\n return;\n }\n\n const { id } = element;\n const nodeIndex = this.#textNodes.get(id);\n if (nodeIndex === undefined) {\n return;\n }\n\n const node = children[nodeIndex];\n\n this.#textNodes.delete(id);\n let owns = node.getAttribute(\"aria-owns\");\n if (owns?.includes(id)) {\n owns = owns\n .split(\" \")\n .filter(x => x !== id)\n .join(\" \");\n if (owns) {\n node.setAttribute(\"aria-owns\", owns);\n } else {\n node.removeAttribute(\"aria-owns\");\n node.setAttribute(\"role\", \"presentation\");\n }\n }\n }\n\n #addIdToAriaOwns(id, node) {\n const owns = node.getAttribute(\"aria-owns\");\n if (!owns?.includes(id)) {\n node.setAttribute(\"aria-owns\", owns ? `${owns} ${id}` : id);\n }\n node.removeAttribute(\"role\");\n }\n\n /**\n * Find the text node which is the nearest and add an aria-owns attribute\n * in order to correctly position this editor in the text flow.\n * @param {HTMLElement} element\n * @param {boolean} isRemovable\n * @returns {string|null} The id in the struct tree if any.\n */\n addPointerInTextLayer(element, isRemovable) {\n const { id } = element;\n if (!id) {\n return null;\n }\n\n if (!this.#enabled) {\n // The text layer needs to be there, so we postpone the association.\n this.#waitingElements.set(element, isRemovable);\n return null;\n }\n\n if (isRemovable) {\n this.removePointerInTextLayer(element);\n }\n\n const children = this.#textChildren;\n if (!children || children.length === 0) {\n return null;\n }\n\n const index = binarySearchFirstItem(\n children,\n node =>\n TextAccessibilityManager.#compareElementPositions(element, node) < 0\n );\n\n const nodeIndex = Math.max(0, index - 1);\n const child = children[nodeIndex];\n this.#addIdToAriaOwns(id, child);\n this.#textNodes.set(id, nodeIndex);\n\n const parent = child.parentNode;\n return parent?.classList.contains(\"markedContent\") ? parent.id : null;\n }\n\n /**\n * Move a div in the DOM in order to respect the visual order.\n * @param {HTMLDivElement} element\n * @returns {string|null} The id in the struct tree if any.\n */\n moveElementInDOM(container, element, contentElement, isRemovable) {\n const id = this.addPointerInTextLayer(contentElement, isRemovable);\n\n if (!container.hasChildNodes()) {\n container.append(element);\n return id;\n }\n\n const children = Array.from(container.childNodes).filter(\n node => node !== element\n );\n\n if (children.length === 0) {\n return id;\n }\n\n const elementToCompare = contentElement || element;\n const index = binarySearchFirstItem(\n children,\n node =>\n TextAccessibilityManager.#compareElementPositions(\n elementToCompare,\n node\n ) < 0\n );\n\n if (index === 0) {\n children[0].before(element);\n } else {\n children[index - 1].after(element);\n }\n\n return id;\n }\n}\n\nexport { TextAccessibilityManager };\n","/* Copyright 2021 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\n/** @typedef {import(\"./event_utils\").EventBus} EventBus */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"./pdf_find_controller\").PDFFindController} PDFFindController */\n\n/**\n * @typedef {Object} TextHighlighterOptions\n * @property {PDFFindController} findController\n * @property {EventBus} eventBus - The application event bus.\n * @property {number} pageIndex - The page index.\n */\n\n/**\n * TextHighlighter handles highlighting matches from the FindController in\n * either the text layer or XFA layer depending on the type of document.\n */\nclass TextHighlighter {\n #eventAbortController = null;\n\n /**\n * @param {TextHighlighterOptions} options\n */\n constructor({ findController, eventBus, pageIndex }) {\n this.findController = findController;\n this.matches = [];\n this.eventBus = eventBus;\n this.pageIdx = pageIndex;\n this.textDivs = null;\n this.textContentItemsStr = null;\n this.enabled = false;\n }\n\n /**\n * Store two arrays that will map DOM nodes to text they should contain.\n * The arrays should be of equal length and the array element at each index\n * should correspond to the other. e.g.\n * `items[0] = \"<span>Item 0</span>\" and texts[0] = \"Item 0\";\n *\n * @param {Array<Node>} divs\n * @param {Array<string>} texts\n */\n setTextMapping(divs, texts) {\n this.textDivs = divs;\n this.textContentItemsStr = texts;\n }\n\n /**\n * Start listening for events to update the highlighter and check if there are\n * any current matches that need be highlighted.\n */\n enable() {\n if (!this.textDivs || !this.textContentItemsStr) {\n throw new Error(\"Text divs and strings have not been set.\");\n }\n if (this.enabled) {\n throw new Error(\"TextHighlighter is already enabled.\");\n }\n this.enabled = true;\n\n if (!this.#eventAbortController) {\n this.#eventAbortController = new AbortController();\n\n this.eventBus._on(\n \"updatetextlayermatches\",\n evt => {\n if (evt.pageIndex === this.pageIdx || evt.pageIndex === -1) {\n this._updateMatches();\n }\n },\n { signal: this.#eventAbortController.signal }\n );\n }\n this._updateMatches();\n }\n\n disable() {\n if (!this.enabled) {\n return;\n }\n this.enabled = false;\n\n this.#eventAbortController?.abort();\n this.#eventAbortController = null;\n\n this._updateMatches(/* reset = */ true);\n }\n\n _convertMatches(matches, matchesLength) {\n // Early exit if there is nothing to convert.\n if (!matches) {\n return [];\n }\n const { textContentItemsStr } = this;\n\n let i = 0,\n iIndex = 0;\n const end = textContentItemsStr.length - 1;\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 && 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 const match = {\n begin: {\n divIdx: i,\n offset: matchIdx - iIndex,\n },\n };\n\n // Calculate the end position.\n matchIdx += matchesLength[m];\n\n // Somewhat the same array as above, but use > instead of >= to get\n // the end position right.\n while (i !== end && 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 } = this;\n const { 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 const infinity = {\n divIdx: -1,\n offset: undefined,\n };\n\n function beginText(begin, className) {\n const divIdx = begin.divIdx;\n textDivs[divIdx].textContent = \"\";\n return appendTextToDiv(divIdx, 0, begin.offset, className);\n }\n\n function appendTextToDiv(divIdx, fromOffset, toOffset, className) {\n let div = textDivs[divIdx];\n if (div.nodeType === Node.TEXT_NODE) {\n const span = document.createElement(\"span\");\n div.before(span);\n span.append(div);\n textDivs[divIdx] = span;\n div = span;\n }\n const content = textContentItemsStr[divIdx].substring(\n fromOffset,\n toOffset\n );\n const node = document.createTextNode(content);\n if (className) {\n const span = document.createElement(\"span\");\n span.className = `${className} appended`;\n span.append(node);\n div.append(span);\n return className.includes(\"selected\") ? span.offsetLeft : 0;\n }\n div.append(node);\n return 0;\n }\n\n let i0 = selectedMatchIdx,\n 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 let lastDivIdx = -1;\n let lastOffset = -1;\n for (let i = i0; i < i1; i++) {\n const match = matches[i];\n const begin = match.begin;\n if (begin.divIdx === lastDivIdx && begin.offset === lastOffset) {\n // It's possible to be in this situation if we searched for a 'f' and we\n // have a ligature 'ff' in the text. The 'ff' has to be highlighted two\n // times.\n continue;\n }\n lastDivIdx = begin.divIdx;\n lastOffset = begin.offset;\n\n const end = match.end;\n const isSelected = isSelectedPage && i === selectedMatchIdx;\n const highlightSuffix = isSelected ? \" selected\" : \"\";\n let selectedLeft = 0;\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 selectedLeft = appendTextToDiv(\n begin.divIdx,\n begin.offset,\n end.offset,\n \"highlight\" + highlightSuffix\n );\n } else {\n selectedLeft = appendTextToDiv(\n begin.divIdx,\n begin.offset,\n infinity.offset,\n \"highlight begin\" + highlightSuffix\n );\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 if (isSelected) {\n // Attempt to scroll the selected match into view.\n findController.scrollMatchIntoView({\n element: textDivs[begin.divIdx],\n selectedLeft,\n pageIndex: pageIdx,\n matchIndex: selectedMatchIdx,\n });\n }\n }\n\n if (prevEnd) {\n appendTextToDiv(prevEnd.divIdx, prevEnd.offset, infinity.offset);\n }\n }\n\n _updateMatches(reset = false) {\n if (!this.enabled && !reset) {\n return;\n }\n const { findController, matches, pageIdx } = this;\n const { textContentItemsStr, textDivs } = this;\n let clearedUntilDivIdx = -1;\n\n // Clear all current matches.\n for (const match of matches) {\n const begin = Math.max(clearedUntilDivIdx, match.begin.divIdx);\n for (let n = begin, end = match.end.divIdx; n <= end; n++) {\n const div = textDivs[n];\n div.textContent = textContentItemsStr[n];\n div.className = \"\";\n }\n clearedUntilDivIdx = match.end.divIdx + 1;\n }\n\n if (!findController?.highlightMatches || reset) {\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\nexport { TextHighlighter };\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\n// eslint-disable-next-line max-len\n/** @typedef {import(\"../src/display/display_utils\").PageViewport} PageViewport */\n/** @typedef {import(\"../src/display/api\").TextContent} TextContent */\n/** @typedef {import(\"./text_highlighter\").TextHighlighter} TextHighlighter */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"./text_accessibility.js\").TextAccessibilityManager} TextAccessibilityManager */\n\nimport { normalizeUnicode, TextLayer } from \"pdfjs-lib\";\nimport { removeNullCharacters } from \"./ui_utils.js\";\n\n/**\n * @typedef {Object} TextLayerBuilderOptions\n * @property {TextHighlighter} highlighter - Optional object that will handle\n * highlighting text from the find controller.\n * @property {TextAccessibilityManager} [accessibilityManager]\n * @property {function} [onAppend]\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.\n */\nclass TextLayerBuilder {\n #enablePermissions = false;\n\n #onAppend = null;\n\n #textContentSource = null;\n\n #textLayer = null;\n\n static #textLayers = new Map();\n\n static #selectionChangeAbortController = null;\n\n constructor({\n highlighter = null,\n accessibilityManager = null,\n enablePermissions = false,\n onAppend = null,\n }) {\n this.renderingDone = false;\n this.highlighter = highlighter;\n this.accessibilityManager = accessibilityManager;\n this.#enablePermissions = enablePermissions === true;\n this.#onAppend = onAppend;\n\n this.div = document.createElement(\"div\");\n this.div.tabIndex = 0;\n this.div.className = \"textLayer\";\n }\n\n #finishRendering() {\n this.renderingDone = true;\n\n const endOfContent = document.createElement(\"div\");\n endOfContent.className = \"endOfContent\";\n this.div.append(endOfContent);\n\n this.#bindMouse(endOfContent);\n }\n\n /**\n * Renders the text layer.\n * @param {PageViewport} viewport\n */\n async render(viewport) {\n if (!this.#textContentSource) {\n throw new Error('No \"textContentSource\" parameter specified.');\n }\n\n if (this.renderingDone && this.#textLayer) {\n this.#textLayer.update({\n viewport,\n onBefore: this.hide.bind(this),\n });\n this.show();\n return;\n }\n\n this.cancel();\n this.#textLayer = new TextLayer({\n textContentSource: this.#textContentSource,\n container: this.div,\n viewport,\n });\n\n const { textDivs, textContentItemsStr } = this.#textLayer;\n this.highlighter?.setTextMapping(textDivs, textContentItemsStr);\n this.accessibilityManager?.setTextMapping(textDivs);\n\n await this.#textLayer.render();\n this.#finishRendering();\n // Ensure that the textLayer is appended to the DOM *before* handling\n // e.g. a pending search operation.\n this.#onAppend?.(this.div);\n this.highlighter?.enable();\n this.accessibilityManager?.enable();\n }\n\n hide() {\n if (!this.div.hidden && this.renderingDone) {\n // We turn off the highlighter in order to avoid to scroll into view an\n // element of the text layer which could be hidden.\n this.highlighter?.disable();\n this.div.hidden = true;\n }\n }\n\n show() {\n if (this.div.hidden && this.renderingDone) {\n this.div.hidden = false;\n this.highlighter?.enable();\n }\n }\n\n /**\n * Cancel rendering of the text layer.\n */\n cancel() {\n this.#textLayer?.cancel();\n this.#textLayer = null;\n\n this.highlighter?.disable();\n this.accessibilityManager?.disable();\n TextLayerBuilder.#removeGlobalSelectionListener(this.div);\n }\n\n /**\n * @param {ReadableStream | TextContent} source\n */\n setTextContentSource(source) {\n this.cancel();\n this.#textContentSource = source;\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 #bindMouse(end) {\n const { div } = this;\n\n div.addEventListener(\"mousedown\", evt => {\n end.classList.add(\"active\");\n });\n\n div.addEventListener(\"copy\", event => {\n if (!this.#enablePermissions) {\n const selection = document.getSelection();\n event.clipboardData.setData(\n \"text/plain\",\n removeNullCharacters(normalizeUnicode(selection.toString()))\n );\n }\n event.preventDefault();\n event.stopPropagation();\n });\n\n TextLayerBuilder.#textLayers.set(div, end);\n TextLayerBuilder.#enableGlobalSelectionListener();\n }\n\n static #removeGlobalSelectionListener(textLayerDiv) {\n this.#textLayers.delete(textLayerDiv);\n\n if (this.#textLayers.size === 0) {\n this.#selectionChangeAbortController?.abort();\n this.#selectionChangeAbortController = null;\n }\n }\n\n static #enableGlobalSelectionListener() {\n if (TextLayerBuilder.#selectionChangeAbortController) {\n // document-level event listeners already installed\n return;\n }\n TextLayerBuilder.#selectionChangeAbortController = new AbortController();\n\n const reset = (end, textLayer) => {\n if (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"MOZCENTRAL\")) {\n textLayer.append(end);\n end.style.width = \"\";\n end.style.height = \"\";\n }\n end.classList.remove(\"active\");\n };\n\n document.addEventListener(\n \"pointerup\",\n () => {\n TextLayerBuilder.#textLayers.forEach(reset);\n },\n { signal: TextLayerBuilder.#selectionChangeAbortController.signal }\n );\n\n if (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"MOZCENTRAL\")) {\n // eslint-disable-next-line no-var\n var isFirefox, prevRange;\n }\n\n document.addEventListener(\n \"selectionchange\",\n () => {\n const selection = document.getSelection();\n if (selection.rangeCount === 0) {\n TextLayerBuilder.#textLayers.forEach(reset);\n return;\n }\n\n // Even though the spec says that .rangeCount should be 0 or 1, Firefox\n // creates multiple ranges when selecting across multiple pages.\n // Make sure to collect all the .textLayer elements where the selection\n // is happening.\n const activeTextLayers = new Set();\n for (let i = 0; i < selection.rangeCount; i++) {\n const range = selection.getRangeAt(i);\n for (const textLayerDiv of TextLayerBuilder.#textLayers.keys()) {\n if (\n !activeTextLayers.has(textLayerDiv) &&\n range.intersectsNode(textLayerDiv)\n ) {\n activeTextLayers.add(textLayerDiv);\n }\n }\n }\n\n for (const [textLayerDiv, endDiv] of TextLayerBuilder.#textLayers) {\n if (activeTextLayers.has(textLayerDiv)) {\n endDiv.classList.add(\"active\");\n } else {\n reset(endDiv, textLayerDiv);\n }\n }\n\n if (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"MOZCENTRAL\")) {\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"CHROME\")) {\n isFirefox = false;\n } else {\n isFirefox ??=\n getComputedStyle(\n TextLayerBuilder.#textLayers.values().next().value\n ).getPropertyValue(\"-moz-user-select\") === \"none\";\n }\n\n if (!isFirefox) {\n // In non-Firefox browsers, when hovering over an empty space (thus,\n // on .endOfContent), the selection will expand to cover all the\n // text between the current selection and .endOfContent. By moving\n // .endOfContent to right after (or before, depending on which side\n // of the selection the user is moving), we limit the selection jump\n // to at most cover the enteirety of the <span> where the selection\n // is being modified.\n const range = selection.getRangeAt(0);\n const modifyStart =\n prevRange &&\n (range.compareBoundaryPoints(Range.END_TO_END, prevRange) === 0 ||\n range.compareBoundaryPoints(Range.START_TO_END, prevRange) ===\n 0);\n let anchor = modifyStart\n ? range.startContainer\n : range.endContainer;\n if (anchor.nodeType === Node.TEXT_NODE) {\n anchor = anchor.parentNode;\n }\n\n const parentTextLayer = anchor.parentElement.closest(\".textLayer\");\n const endDiv = TextLayerBuilder.#textLayers.get(parentTextLayer);\n if (endDiv) {\n endDiv.style.width = parentTextLayer.style.width;\n endDiv.style.height = parentTextLayer.style.height;\n anchor.parentElement.insertBefore(\n endDiv,\n modifyStart ? anchor : anchor.nextSibling\n );\n }\n\n prevRange = range.cloneRange();\n }\n }\n },\n { signal: TextLayerBuilder.#selectionChangeAbortController.signal }\n );\n }\n}\n\nexport { TextLayerBuilder };\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\n// eslint-disable-next-line max-len\n/** @typedef {import(\"../src/display/display_utils\").PageViewport} PageViewport */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"../src/display/optional_content_config\").OptionalContentConfig} OptionalContentConfig */\n/** @typedef {import(\"./event_utils\").EventBus} EventBus */\n/** @typedef {import(\"./interfaces\").IL10n} IL10n */\n/** @typedef {import(\"./interfaces\").IRenderableView} IRenderableView */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"./pdf_rendering_queue\").PDFRenderingQueue} PDFRenderingQueue */\n\nimport {\n AbortException,\n AnnotationMode,\n PixelsPerInch,\n RenderingCancelledException,\n setLayerDimensions,\n shadow,\n} from \"pdfjs-lib\";\nimport {\n approximateFraction,\n DEFAULT_SCALE,\n OutputScale,\n RenderingStates,\n roundToDivide,\n TextLayerMode,\n} from \"./ui_utils.js\";\nimport { AnnotationEditorLayerBuilder } from \"./annotation_editor_layer_builder.js\";\nimport { AnnotationLayerBuilder } from \"./annotation_layer_builder.js\";\nimport { AppOptions } from \"./app_options.js\";\nimport { DrawLayerBuilder } from \"./draw_layer_builder.js\";\nimport { GenericL10n } from \"web-null_l10n\";\nimport { SimpleLinkService } from \"./pdf_link_service.js\";\nimport { StructTreeLayerBuilder } from \"./struct_tree_layer_builder.js\";\nimport { TextAccessibilityManager } from \"./text_accessibility.js\";\nimport { TextHighlighter } from \"./text_highlighter.js\";\nimport { TextLayerBuilder } from \"./text_layer_builder.js\";\nimport { XfaLayerBuilder } from \"./xfa_layer_builder.js\";\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 {Promise<OptionalContentConfig>} [optionalContentConfigPromise] -\n * A promise that is resolved with an {@link OptionalContentConfig} instance.\n * The default value is `null`.\n * @property {PDFRenderingQueue} [renderingQueue] - The rendering queue object.\n * @property {number} [textLayerMode] - Controls if the text layer used for\n * selection and searching is created. The constants from {TextLayerMode}\n * should be used. The default value is `TextLayerMode.ENABLE`.\n * @property {number} [annotationMode] - Controls if the annotation layer is\n * created, and if interactive form elements or `AnnotationStorage`-data are\n * being rendered. The constants from {@link AnnotationMode} should be used;\n * see also {@link RenderParameters} and {@link GetOperatorListParameters}.\n * The default value is `AnnotationMode.ENABLE_FORMS`.\n * @property {string} [imageResourcesPath] - Path for image resources, mainly\n * for annotation icons. Include trailing slash.\n * @property {number} [maxCanvasPixels] - The maximum supported canvas size in\n * total pixels, i.e. width * height. Use `-1` for no limit, or `0` for\n * CSS-only zooming. The default value is 4096 * 8192 (32 mega-pixels).\n * @property {Object} [pageColors] - Overwrites background and foreground colors\n * with user defined ones in order to improve readability in high contrast\n * mode.\n * @property {IL10n} [l10n] - Localization service.\n * @property {Object} [layerProperties] - The object that is used to lookup\n * the necessary layer-properties.\n */\n\nconst DEFAULT_LAYER_PROPERTIES =\n typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"COMPONENTS\")\n ? null\n : {\n annotationEditorUIManager: null,\n annotationStorage: null,\n downloadManager: null,\n enableScripting: false,\n fieldObjectsPromise: null,\n findController: null,\n hasJSActionsPromise: null,\n get linkService() {\n return new SimpleLinkService();\n },\n };\n\nconst LAYERS_ORDER = new Map([\n [\"canvasWrapper\", 0],\n [\"textLayer\", 1],\n [\"annotationLayer\", 2],\n [\"annotationEditorLayer\", 3],\n [\"xfaLayer\", 3],\n]);\n\n/**\n * @implements {IRenderableView}\n */\nclass PDFPageView {\n #annotationMode = AnnotationMode.ENABLE_FORMS;\n\n #hasRestrictedScaling = false;\n\n #layerProperties = null;\n\n #loadingId = null;\n\n #previousRotation = null;\n\n #renderError = null;\n\n #renderingState = RenderingStates.INITIAL;\n\n #textLayerMode = TextLayerMode.ENABLE;\n\n #useThumbnailCanvas = {\n directDrawing: true,\n initialOptionalContent: true,\n regularAnnotations: true,\n };\n\n #viewportMap = new WeakMap();\n\n #layers = [null, null, null, null];\n\n /**\n * @param {PDFPageViewOptions} options\n */\n constructor(options) {\n const container = options.container;\n const defaultViewport = options.defaultViewport;\n\n this.id = options.id;\n this.renderingId = \"page\" + this.id;\n this.#layerProperties = options.layerProperties || DEFAULT_LAYER_PROPERTIES;\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._optionalContentConfigPromise =\n options.optionalContentConfigPromise || null;\n this.#textLayerMode = options.textLayerMode ?? TextLayerMode.ENABLE;\n this.#annotationMode =\n options.annotationMode ?? AnnotationMode.ENABLE_FORMS;\n this.imageResourcesPath = options.imageResourcesPath || \"\";\n this.maxCanvasPixels =\n options.maxCanvasPixels ?? AppOptions.get(\"maxCanvasPixels\");\n this.pageColors = options.pageColors || null;\n\n this.eventBus = options.eventBus;\n this.renderingQueue = options.renderingQueue;\n this.l10n = options.l10n;\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n this.l10n ||= new GenericL10n();\n }\n\n this.renderTask = null;\n this.resume = null;\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n this._isStandalone = !this.renderingQueue?.hasViewer();\n this._container = container;\n }\n\n this._annotationCanvasMap = null;\n\n this.annotationLayer = null;\n this.annotationEditorLayer = null;\n this.textLayer = null;\n this.zoomLayer = null;\n this.xfaLayer = null;\n this.structTreeLayer = null;\n this.drawLayer = null;\n\n const div = document.createElement(\"div\");\n div.className = \"page\";\n div.setAttribute(\"data-page-number\", this.id);\n div.setAttribute(\"role\", \"region\");\n div.setAttribute(\"data-l10n-id\", \"pdfjs-page-landmark\");\n div.setAttribute(\"data-l10n-args\", JSON.stringify({ page: this.id }));\n this.div = div;\n\n this.#setDimensions();\n container?.append(div);\n\n if (\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) &&\n this._isStandalone\n ) {\n // Ensure that the various layers always get the correct initial size,\n // see issue 15795.\n container?.style.setProperty(\n \"--scale-factor\",\n this.scale * PixelsPerInch.PDF_TO_CSS_UNITS\n );\n\n const { optionalContentConfigPromise } = options;\n if (optionalContentConfigPromise) {\n // Ensure that the thumbnails always display the *initial* document\n // state, for documents with optional content.\n optionalContentConfigPromise.then(optionalContentConfig => {\n if (\n optionalContentConfigPromise !== this._optionalContentConfigPromise\n ) {\n return;\n }\n this.#useThumbnailCanvas.initialOptionalContent =\n optionalContentConfig.hasInitialVisibility;\n });\n }\n\n // Ensure that Fluent is connected in e.g. the COMPONENTS build.\n if (!options.l10n) {\n this.l10n.translate(this.div);\n }\n }\n }\n\n #addLayer(div, name) {\n const pos = LAYERS_ORDER.get(name);\n const oldDiv = this.#layers[pos];\n this.#layers[pos] = div;\n if (oldDiv) {\n oldDiv.replaceWith(div);\n return;\n }\n for (let i = pos - 1; i >= 0; i--) {\n const layer = this.#layers[i];\n if (layer) {\n layer.after(div);\n return;\n }\n }\n this.div.prepend(div);\n }\n\n get renderingState() {\n return this.#renderingState;\n }\n\n set renderingState(state) {\n if (state === this.#renderingState) {\n return;\n }\n this.#renderingState = state;\n\n if (this.#loadingId) {\n clearTimeout(this.#loadingId);\n this.#loadingId = null;\n }\n\n switch (state) {\n case RenderingStates.PAUSED:\n this.div.classList.remove(\"loading\");\n break;\n case RenderingStates.RUNNING:\n this.div.classList.add(\"loadingIcon\");\n this.#loadingId = setTimeout(() => {\n // Adding the loading class is slightly postponed in order to not have\n // it with loadingIcon.\n // If we don't do that the visibility of the background is changed but\n // the transition isn't triggered.\n this.div.classList.add(\"loading\");\n this.#loadingId = null;\n }, 0);\n break;\n case RenderingStates.INITIAL:\n case RenderingStates.FINISHED:\n this.div.classList.remove(\"loadingIcon\", \"loading\");\n break;\n }\n }\n\n #setDimensions() {\n const { viewport } = this;\n if (this.pdfPage) {\n if (this.#previousRotation === viewport.rotation) {\n return;\n }\n this.#previousRotation = viewport.rotation;\n }\n\n setLayerDimensions(\n this.div,\n viewport,\n /* mustFlip = */ true,\n /* mustRotate = */ false\n );\n }\n\n setPdfPage(pdfPage) {\n if (\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) &&\n this._isStandalone &&\n (this.pageColors?.foreground === \"CanvasText\" ||\n this.pageColors?.background === \"Canvas\")\n ) {\n this._container?.style.setProperty(\n \"--hcm-highlight-filter\",\n pdfPage.filterFactory.addHighlightHCMFilter(\n \"highlight\",\n \"CanvasText\",\n \"Canvas\",\n \"HighlightText\",\n \"Highlight\"\n )\n );\n this._container?.style.setProperty(\n \"--hcm-highlight-selected-filter\",\n pdfPage.filterFactory.addHighlightHCMFilter(\n \"highlight_selected\",\n \"CanvasText\",\n \"Canvas\",\n \"HighlightText\",\n \"Highlight\"\n )\n );\n }\n this.pdfPage = pdfPage;\n this.pdfPageRotate = pdfPage.rotate;\n\n const totalRotation = (this.rotation + this.pdfPageRotate) % 360;\n this.viewport = pdfPage.getViewport({\n scale: this.scale * PixelsPerInch.PDF_TO_CSS_UNITS,\n rotation: totalRotation,\n });\n this.#setDimensions();\n this.reset();\n }\n\n destroy() {\n this.reset();\n this.pdfPage?.cleanup();\n }\n\n get _textHighlighter() {\n return shadow(\n this,\n \"_textHighlighter\",\n new TextHighlighter({\n pageIndex: this.id - 1,\n eventBus: this.eventBus,\n findController: this.#layerProperties.findController,\n })\n );\n }\n\n async #renderAnnotationLayer() {\n let error = null;\n try {\n await this.annotationLayer.render(this.viewport, \"display\");\n } catch (ex) {\n console.error(`#renderAnnotationLayer: \"${ex}\".`);\n error = ex;\n } finally {\n this.eventBus.dispatch(\"annotationlayerrendered\", {\n source: this,\n pageNumber: this.id,\n error,\n });\n }\n }\n\n async #renderAnnotationEditorLayer() {\n let error = null;\n try {\n await this.annotationEditorLayer.render(this.viewport, \"display\");\n } catch (ex) {\n console.error(`#renderAnnotationEditorLayer: \"${ex}\".`);\n error = ex;\n } finally {\n this.eventBus.dispatch(\"annotationeditorlayerrendered\", {\n source: this,\n pageNumber: this.id,\n error,\n });\n }\n }\n\n async #renderDrawLayer() {\n try {\n await this.drawLayer.render(\"display\");\n } catch (ex) {\n console.error(`#renderDrawLayer: \"${ex}\".`);\n }\n }\n\n async #renderXfaLayer() {\n let error = null;\n try {\n const result = await this.xfaLayer.render(this.viewport, \"display\");\n if (result?.textDivs && this._textHighlighter) {\n // Given that the following method fetches the text asynchronously we\n // can invoke it *before* appending the xfaLayer to the DOM (below),\n // since a pending search-highlight/scroll operation thus won't run\n // until after the xfaLayer is available in the viewer.\n this.#buildXfaTextContentItems(result.textDivs);\n }\n } catch (ex) {\n console.error(`#renderXfaLayer: \"${ex}\".`);\n error = ex;\n } finally {\n if (this.xfaLayer?.div) {\n // Pause translation when inserting the xfaLayer in the DOM.\n this.l10n.pause();\n this.#addLayer(this.xfaLayer.div, \"xfaLayer\");\n this.l10n.resume();\n }\n\n this.eventBus.dispatch(\"xfalayerrendered\", {\n source: this,\n pageNumber: this.id,\n error,\n });\n }\n }\n\n async #renderTextLayer() {\n const { pdfPage, textLayer, viewport } = this;\n if (!textLayer) {\n return;\n }\n\n let error = null;\n try {\n if (!textLayer.renderingDone) {\n const readableStream = pdfPage.streamTextContent({\n includeMarkedContent: true,\n disableNormalization: true,\n });\n textLayer.setTextContentSource(readableStream);\n }\n await textLayer.render(viewport);\n } catch (ex) {\n if (ex instanceof AbortException) {\n return;\n }\n console.error(`#renderTextLayer: \"${ex}\".`);\n error = ex;\n }\n\n this.eventBus.dispatch(\"textlayerrendered\", {\n source: this,\n pageNumber: this.id,\n error,\n });\n\n this.#renderStructTreeLayer();\n }\n\n /**\n * The structure tree is currently only supported when the text layer is\n * enabled and a canvas is used for rendering.\n *\n * The structure tree must be generated after the text layer for the\n * aria-owns to work.\n */\n async #renderStructTreeLayer() {\n if (!this.textLayer) {\n return;\n }\n this.structTreeLayer ||= new StructTreeLayerBuilder();\n\n const tree = await (!this.structTreeLayer.renderingDone\n ? this.pdfPage.getStructTree()\n : null);\n const treeDom = this.structTreeLayer?.render(tree);\n if (treeDom) {\n // Pause translation when inserting the structTree in the DOM.\n this.l10n.pause();\n this.canvas?.append(treeDom);\n this.l10n.resume();\n }\n this.structTreeLayer?.show();\n }\n\n async #buildXfaTextContentItems(textDivs) {\n const text = await this.pdfPage.getTextContent();\n const items = [];\n for (const item of text.items) {\n items.push(item.str);\n }\n this._textHighlighter.setTextMapping(textDivs, items);\n this._textHighlighter.enable();\n }\n\n /**\n * @private\n */\n _resetZoomLayer(removeFromDOM = false) {\n if (!this.zoomLayer) {\n return;\n }\n const zoomLayerCanvas = this.zoomLayer.firstChild;\n this.#viewportMap.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({\n keepZoomLayer = false,\n keepAnnotationLayer = false,\n keepAnnotationEditorLayer = false,\n keepXfaLayer = false,\n keepTextLayer = false,\n } = {}) {\n this.cancelRendering({\n keepAnnotationLayer,\n keepAnnotationEditorLayer,\n keepXfaLayer,\n keepTextLayer,\n });\n this.renderingState = RenderingStates.INITIAL;\n\n const div = this.div;\n\n const childNodes = div.childNodes,\n zoomLayerNode = (keepZoomLayer && this.zoomLayer) || null,\n annotationLayerNode =\n (keepAnnotationLayer && this.annotationLayer?.div) || null,\n annotationEditorLayerNode =\n (keepAnnotationEditorLayer && this.annotationEditorLayer?.div) || null,\n xfaLayerNode = (keepXfaLayer && this.xfaLayer?.div) || null,\n textLayerNode = (keepTextLayer && this.textLayer?.div) || null;\n for (let i = childNodes.length - 1; i >= 0; i--) {\n const node = childNodes[i];\n switch (node) {\n case zoomLayerNode:\n case annotationLayerNode:\n case annotationEditorLayerNode:\n case xfaLayerNode:\n case textLayerNode:\n continue;\n }\n node.remove();\n const layerIndex = this.#layers.indexOf(node);\n if (layerIndex >= 0) {\n this.#layers[layerIndex] = null;\n }\n }\n div.removeAttribute(\"data-loaded\");\n\n if (annotationLayerNode) {\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 }\n if (annotationEditorLayerNode) {\n this.annotationEditorLayer.hide();\n }\n if (xfaLayerNode) {\n // Hide the XFA layer until all elements are resized\n // so they are not displayed on the already resized page.\n this.xfaLayer.hide();\n }\n if (textLayerNode) {\n this.textLayer.hide();\n }\n this.structTreeLayer?.hide();\n\n if (!zoomLayerNode) {\n if (this.canvas) {\n this.#viewportMap.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 }\n\n /**\n * @typedef {Object} PDFPageViewUpdateParameters\n * @property {number} [scale] The new scale, if specified.\n * @property {number} [rotation] The new rotation, if specified.\n * @property {Promise<OptionalContentConfig>} [optionalContentConfigPromise]\n * A promise that is resolved with an {@link OptionalContentConfig}\n * instance. The default value is `null`.\n * @property {number} [drawingDelay]\n */\n\n /**\n * Update e.g. the scale and/or rotation of the page.\n * @param {PDFPageViewUpdateParameters} params\n */\n update({\n scale = 0,\n rotation = null,\n optionalContentConfigPromise = null,\n drawingDelay = -1,\n }) {\n this.scale = scale || this.scale;\n if (typeof rotation === \"number\") {\n this.rotation = rotation; // The rotation may be zero.\n }\n if (optionalContentConfigPromise instanceof Promise) {\n this._optionalContentConfigPromise = optionalContentConfigPromise;\n\n // Ensure that the thumbnails always display the *initial* document state,\n // for documents with optional content.\n optionalContentConfigPromise.then(optionalContentConfig => {\n if (\n optionalContentConfigPromise !== this._optionalContentConfigPromise\n ) {\n return;\n }\n this.#useThumbnailCanvas.initialOptionalContent =\n optionalContentConfig.hasInitialVisibility;\n });\n }\n this.#useThumbnailCanvas.directDrawing = true;\n\n const totalRotation = (this.rotation + this.pdfPageRotate) % 360;\n this.viewport = this.viewport.clone({\n scale: this.scale * PixelsPerInch.PDF_TO_CSS_UNITS,\n rotation: totalRotation,\n });\n this.#setDimensions();\n\n if (\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) &&\n this._isStandalone\n ) {\n this._container?.style.setProperty(\"--scale-factor\", this.viewport.scale);\n }\n\n if (this.canvas) {\n let onlyCssZoom = false;\n if (this.#hasRestrictedScaling) {\n if (\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) &&\n this.maxCanvasPixels === 0\n ) {\n onlyCssZoom = true;\n } else if (this.maxCanvasPixels > 0) {\n const { width, height } = this.viewport;\n const { sx, sy } = this.outputScale;\n onlyCssZoom =\n ((Math.floor(width) * sx) | 0) * ((Math.floor(height) * sy) | 0) >\n this.maxCanvasPixels;\n }\n }\n const postponeDrawing = drawingDelay >= 0 && drawingDelay < 1000;\n\n if (postponeDrawing || onlyCssZoom) {\n if (\n postponeDrawing &&\n !onlyCssZoom &&\n this.renderingState !== RenderingStates.FINISHED\n ) {\n this.cancelRendering({\n keepZoomLayer: true,\n keepAnnotationLayer: true,\n keepAnnotationEditorLayer: true,\n keepXfaLayer: true,\n keepTextLayer: true,\n cancelExtraDelay: drawingDelay,\n });\n // It isn't really finished, but once we have finished\n // to postpone, we'll call this.reset(...) which will set\n // the rendering state to INITIAL, hence the next call to\n // PDFViewer.update() will trigger a redraw (if it's mandatory).\n this.renderingState = RenderingStates.FINISHED;\n // Ensure that the thumbnails won't become partially (or fully) blank,\n // if the sidebar is opened before the actual rendering is done.\n this.#useThumbnailCanvas.directDrawing = false;\n }\n\n this.cssTransform({\n target: this.canvas,\n redrawAnnotationLayer: true,\n redrawAnnotationEditorLayer: true,\n redrawXfaLayer: true,\n redrawTextLayer: !postponeDrawing,\n hideTextLayer: postponeDrawing,\n });\n\n if (postponeDrawing) {\n // The \"pagerendered\"-event will be dispatched once the actual\n // rendering is done, hence don't dispatch it here as well.\n return;\n }\n this.eventBus.dispatch(\"pagerendered\", {\n source: this,\n pageNumber: this.id,\n cssTransform: true,\n timestamp: performance.now(),\n error: this.#renderError,\n });\n return;\n }\n if (!this.zoomLayer && !this.canvas.hidden) {\n this.zoomLayer = this.canvas.parentNode;\n this.zoomLayer.style.position = \"absolute\";\n }\n }\n if (this.zoomLayer) {\n this.cssTransform({ target: this.zoomLayer.firstChild });\n }\n this.reset({\n keepZoomLayer: true,\n keepAnnotationLayer: true,\n keepAnnotationEditorLayer: true,\n keepXfaLayer: true,\n keepTextLayer: true,\n });\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({\n keepAnnotationLayer = false,\n keepAnnotationEditorLayer = false,\n keepXfaLayer = false,\n keepTextLayer = false,\n cancelExtraDelay = 0,\n } = {}) {\n if (this.renderTask) {\n this.renderTask.cancel(cancelExtraDelay);\n this.renderTask = null;\n }\n this.resume = null;\n\n if (this.textLayer && (!keepTextLayer || !this.textLayer.div)) {\n this.textLayer.cancel();\n this.textLayer = null;\n }\n if (this.structTreeLayer && !this.textLayer) {\n this.structTreeLayer = null;\n }\n if (\n this.annotationLayer &&\n (!keepAnnotationLayer || !this.annotationLayer.div)\n ) {\n this.annotationLayer.cancel();\n this.annotationLayer = null;\n this._annotationCanvasMap = null;\n }\n if (\n this.annotationEditorLayer &&\n (!keepAnnotationEditorLayer || !this.annotationEditorLayer.div)\n ) {\n if (this.drawLayer) {\n this.drawLayer.cancel();\n this.drawLayer = null;\n }\n this.annotationEditorLayer.cancel();\n this.annotationEditorLayer = null;\n }\n if (this.xfaLayer && (!keepXfaLayer || !this.xfaLayer.div)) {\n this.xfaLayer.cancel();\n this.xfaLayer = null;\n this._textHighlighter?.disable();\n }\n }\n\n cssTransform({\n target,\n redrawAnnotationLayer = false,\n redrawAnnotationEditorLayer = false,\n redrawXfaLayer = false,\n redrawTextLayer = false,\n hideTextLayer = false,\n }) {\n // Scale target (canvas), its wrapper and page container.\n if (\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) &&\n !(target instanceof HTMLCanvasElement)\n ) {\n throw new Error(\"Expected `target` to be a canvas.\");\n }\n if (!target.hasAttribute(\"zooming\")) {\n target.setAttribute(\"zooming\", true);\n const { style } = target;\n style.width = style.height = \"\";\n }\n\n const originalViewport = this.#viewportMap.get(target);\n if (this.viewport !== originalViewport) {\n // The canvas may have been originally rotated; rotate relative to that.\n const relativeRotation =\n this.viewport.rotation - originalViewport.rotation;\n const absRotation = Math.abs(relativeRotation);\n let scaleX = 1,\n scaleY = 1;\n if (absRotation === 90 || absRotation === 270) {\n const { width, height } = this.viewport;\n // Scale x and y because of the rotation.\n scaleX = height / width;\n scaleY = width / height;\n }\n target.style.transform = `rotate(${relativeRotation}deg) scale(${scaleX}, ${scaleY})`;\n }\n\n if (redrawAnnotationLayer && this.annotationLayer) {\n this.#renderAnnotationLayer();\n }\n if (redrawAnnotationEditorLayer && this.annotationEditorLayer) {\n if (this.drawLayer) {\n this.#renderDrawLayer();\n }\n this.#renderAnnotationEditorLayer();\n }\n if (redrawXfaLayer && this.xfaLayer) {\n this.#renderXfaLayer();\n }\n\n if (this.textLayer) {\n if (hideTextLayer) {\n this.textLayer.hide();\n this.structTreeLayer?.hide();\n } else if (redrawTextLayer) {\n this.#renderTextLayer();\n }\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 async #finishRenderTask(renderTask, error = null) {\n // The renderTask may have been replaced by a new one, so only remove\n // the reference to the renderTask if it matches the one that is\n // triggering this callback.\n if (renderTask === this.renderTask) {\n this.renderTask = null;\n }\n\n if (error instanceof RenderingCancelledException) {\n this.#renderError = null;\n return;\n }\n this.#renderError = error;\n\n this.renderingState = RenderingStates.FINISHED;\n this._resetZoomLayer(/* removeFromDOM = */ true);\n\n // Ensure that the thumbnails won't become partially (or fully) blank,\n // for documents that contain interactive form elements.\n this.#useThumbnailCanvas.regularAnnotations = !renderTask.separateAnnots;\n\n this.eventBus.dispatch(\"pagerendered\", {\n source: this,\n pageNumber: this.id,\n cssTransform: false,\n timestamp: performance.now(),\n error: this.#renderError,\n });\n\n if (error) {\n throw error;\n }\n }\n\n async 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 const { div, l10n, pageColors, pdfPage, viewport } = this;\n\n if (!pdfPage) {\n this.renderingState = RenderingStates.FINISHED;\n throw new Error(\"pdfPage is not loaded\");\n }\n\n this.renderingState = RenderingStates.RUNNING;\n\n // Wrap the canvas so that if it has a CSS transform for high DPI the\n // overflow will be hidden in Firefox.\n const canvasWrapper = document.createElement(\"div\");\n canvasWrapper.classList.add(\"canvasWrapper\");\n this.#addLayer(canvasWrapper, \"canvasWrapper\");\n\n if (\n !this.textLayer &&\n this.#textLayerMode !== TextLayerMode.DISABLE &&\n !pdfPage.isPureXfa\n ) {\n this._accessibilityManager ||= new TextAccessibilityManager();\n\n this.textLayer = new TextLayerBuilder({\n highlighter: this._textHighlighter,\n accessibilityManager: this._accessibilityManager,\n enablePermissions:\n this.#textLayerMode === TextLayerMode.ENABLE_PERMISSIONS,\n onAppend: textLayerDiv => {\n // Pause translation when inserting the textLayer in the DOM.\n this.l10n.pause();\n this.#addLayer(textLayerDiv, \"textLayer\");\n this.l10n.resume();\n },\n });\n }\n\n if (\n !this.annotationLayer &&\n this.#annotationMode !== AnnotationMode.DISABLE\n ) {\n const {\n annotationStorage,\n annotationEditorUIManager,\n downloadManager,\n enableScripting,\n fieldObjectsPromise,\n hasJSActionsPromise,\n linkService,\n } = this.#layerProperties;\n\n this._annotationCanvasMap ||= new Map();\n this.annotationLayer = new AnnotationLayerBuilder({\n pdfPage,\n annotationStorage,\n imageResourcesPath: this.imageResourcesPath,\n renderForms: this.#annotationMode === AnnotationMode.ENABLE_FORMS,\n linkService,\n downloadManager,\n enableScripting,\n hasJSActionsPromise,\n fieldObjectsPromise,\n annotationCanvasMap: this._annotationCanvasMap,\n accessibilityManager: this._accessibilityManager,\n annotationEditorUIManager,\n onAppend: annotationLayerDiv => {\n this.#addLayer(annotationLayerDiv, \"annotationLayer\");\n },\n });\n }\n\n const renderContinueCallback = cont => {\n showCanvas?.(false);\n if (this.renderingQueue && !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 const { width, height } = viewport;\n const canvas = document.createElement(\"canvas\");\n canvas.setAttribute(\"role\", \"presentation\");\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.hidden = true;\n const hasHCM = !!(pageColors?.background && pageColors?.foreground);\n\n let showCanvas = isLastShow => {\n // In HCM, a final filter is applied on the canvas which means that\n // before it's applied we've normal colors. Consequently, to avoid to have\n // a final flash we just display it once all the drawing is done.\n if (!hasHCM || isLastShow) {\n canvas.hidden = false;\n showCanvas = null; // Only invoke the function once.\n }\n };\n canvasWrapper.append(canvas);\n this.canvas = canvas;\n\n const ctx = canvas.getContext(\"2d\", { alpha: false });\n const outputScale = (this.outputScale = new OutputScale());\n\n if (\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) &&\n this.maxCanvasPixels === 0\n ) {\n const invScale = 1 / this.scale;\n // Use a scale that makes the canvas have the originally intended size\n // of the page.\n outputScale.sx *= invScale;\n outputScale.sy *= invScale;\n this.#hasRestrictedScaling = true;\n } else if (this.maxCanvasPixels > 0) {\n const pixelsInViewport = width * height;\n const maxScale = Math.sqrt(this.maxCanvasPixels / pixelsInViewport);\n if (outputScale.sx > maxScale || outputScale.sy > maxScale) {\n outputScale.sx = maxScale;\n outputScale.sy = maxScale;\n this.#hasRestrictedScaling = true;\n } else {\n this.#hasRestrictedScaling = false;\n }\n }\n const sfx = approximateFraction(outputScale.sx);\n const sfy = approximateFraction(outputScale.sy);\n\n canvas.width = roundToDivide(width * outputScale.sx, sfx[0]);\n canvas.height = roundToDivide(height * outputScale.sy, sfy[0]);\n const { style } = canvas;\n style.width = roundToDivide(width, sfx[1]) + \"px\";\n style.height = roundToDivide(height, sfy[1]) + \"px\";\n\n // Add the viewport so it's known what it was originally drawn with.\n this.#viewportMap.set(canvas, viewport);\n\n // Rendering area\n const transform = outputScale.scaled\n ? [outputScale.sx, 0, 0, outputScale.sy, 0, 0]\n : null;\n const renderContext = {\n canvasContext: ctx,\n transform,\n viewport,\n annotationMode: this.#annotationMode,\n optionalContentConfigPromise: this._optionalContentConfigPromise,\n annotationCanvasMap: this._annotationCanvasMap,\n pageColors,\n };\n const renderTask = (this.renderTask = this.pdfPage.render(renderContext));\n renderTask.onContinue = renderContinueCallback;\n\n const resultPromise = renderTask.promise.then(\n async () => {\n showCanvas?.(true);\n await this.#finishRenderTask(renderTask);\n\n this.#renderTextLayer();\n\n if (this.annotationLayer) {\n await this.#renderAnnotationLayer();\n }\n\n const { annotationEditorUIManager } = this.#layerProperties;\n\n if (!annotationEditorUIManager) {\n return;\n }\n\n this.drawLayer ||= new DrawLayerBuilder({\n pageIndex: this.id,\n });\n await this.#renderDrawLayer();\n this.drawLayer.setParent(canvasWrapper);\n\n if (!this.annotationEditorLayer) {\n this.annotationEditorLayer = new AnnotationEditorLayerBuilder({\n uiManager: annotationEditorUIManager,\n pdfPage,\n l10n,\n accessibilityManager: this._accessibilityManager,\n annotationLayer: this.annotationLayer?.annotationLayer,\n textLayer: this.textLayer,\n drawLayer: this.drawLayer.getDrawLayer(),\n onAppend: annotationEditorLayerDiv => {\n this.#addLayer(annotationEditorLayerDiv, \"annotationEditorLayer\");\n },\n });\n }\n this.#renderAnnotationEditorLayer();\n },\n error => {\n // When zooming with a `drawingDelay` set, avoid temporarily showing\n // a black canvas if rendering was cancelled before the `onContinue`-\n // callback had been invoked at least once.\n if (!(error instanceof RenderingCancelledException)) {\n showCanvas?.(true);\n }\n return this.#finishRenderTask(renderTask, error);\n }\n );\n\n if (pdfPage.isPureXfa) {\n if (!this.xfaLayer) {\n const { annotationStorage, linkService } = this.#layerProperties;\n\n this.xfaLayer = new XfaLayerBuilder({\n pdfPage,\n annotationStorage,\n linkService,\n });\n }\n this.#renderXfaLayer();\n }\n\n div.setAttribute(\"data-loaded\", true);\n\n this.eventBus.dispatch(\"pagerender\", {\n source: this,\n pageNumber: this.id,\n });\n return resultPromise;\n }\n\n /**\n * @param {string|null} label\n */\n setPageLabel(label) {\n this.pageLabel = typeof label === \"string\" ? label : null;\n\n this.div.setAttribute(\n \"data-l10n-args\",\n JSON.stringify({ page: this.pageLabel ?? this.id })\n );\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 /**\n * For use by the `PDFThumbnailView.setImage`-method.\n * @ignore\n */\n get thumbnailCanvas() {\n const { directDrawing, initialOptionalContent, regularAnnotations } =\n this.#useThumbnailCanvas;\n return directDrawing && initialOptionalContent && regularAnnotations\n ? this.canvas\n : null;\n }\n}\n\nexport { PDFPageView };\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\n/** @typedef {import(\"../src/display/api\").PDFDocumentProxy} PDFDocumentProxy */\n/** @typedef {import(\"../src/display/api\").PDFPageProxy} PDFPageProxy */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"../src/display/display_utils\").PageViewport} PageViewport */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"../src/display/optional_content_config\").OptionalContentConfig} OptionalContentConfig */\n/** @typedef {import(\"./event_utils\").EventBus} EventBus */\n/** @typedef {import(\"./interfaces\").IDownloadManager} IDownloadManager */\n/** @typedef {import(\"./interfaces\").IL10n} IL10n */\n/** @typedef {import(\"./interfaces\").IPDFLinkService} IPDFLinkService */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"./pdf_find_controller\").PDFFindController} PDFFindController */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"./pdf_scripting_manager\").PDFScriptingManager} PDFScriptingManager */\n\nimport {\n AnnotationEditorType,\n AnnotationEditorUIManager,\n AnnotationMode,\n PermissionFlag,\n PixelsPerInch,\n shadow,\n version,\n} from \"pdfjs-lib\";\nimport {\n DEFAULT_SCALE,\n DEFAULT_SCALE_DELTA,\n DEFAULT_SCALE_VALUE,\n docStyle,\n getVisibleElements,\n isPortraitOrientation,\n isValidRotation,\n isValidScrollMode,\n isValidSpreadMode,\n MAX_AUTO_SCALE,\n MAX_SCALE,\n MIN_SCALE,\n PresentationModeState,\n removeNullCharacters,\n RenderingStates,\n SCROLLBAR_PADDING,\n scrollIntoView,\n ScrollMode,\n SpreadMode,\n TextLayerMode,\n UNKNOWN_SCALE,\n VERTICAL_PADDING,\n watchScroll,\n} from \"./ui_utils.js\";\nimport { GenericL10n } from \"web-null_l10n\";\nimport { PDFPageView } from \"./pdf_page_view.js\";\nimport { PDFRenderingQueue } from \"./pdf_rendering_queue.js\";\nimport { SimpleLinkService } from \"./pdf_link_service.js\";\n\nconst DEFAULT_CACHE_SIZE = 10;\n\nconst PagesCountLimit = {\n FORCE_SCROLL_MODE_PAGE: 15000,\n FORCE_LAZY_PAGE_INIT: 7500,\n PAUSE_EAGER_PAGE_INIT: 250,\n};\n\nfunction isValidAnnotationEditorMode(mode) {\n return (\n Object.values(AnnotationEditorType).includes(mode) &&\n mode !== AnnotationEditorType.DISABLE\n );\n}\n\n/**\n * @typedef {Object} PDFViewerOptions\n * @property {HTMLDivElement} container - The container for the viewer element.\n * @property {HTMLDivElement} [viewer] - The viewer element.\n * @property {EventBus} eventBus - The application event bus.\n * @property {IPDFLinkService} [linkService] - The navigation/linking service.\n * @property {IDownloadManager} [downloadManager] - The download manager\n * component.\n * @property {PDFFindController} [findController] - The find controller\n * component.\n * @property {PDFScriptingManager} [scriptingManager] - The scripting manager\n * component.\n * @property {PDFRenderingQueue} [renderingQueue] - The rendering queue object.\n * @property {boolean} [removePageBorders] - Removes the border shadow around\n * the pages. The default value is `false`.\n * @property {number} [textLayerMode] - Controls if the text layer used for\n * selection and searching is created. The constants from {TextLayerMode}\n * should be used. The default value is `TextLayerMode.ENABLE`.\n * @property {number} [annotationMode] - Controls if the annotation layer is\n * created, and if interactive form elements or `AnnotationStorage`-data are\n * being rendered. The constants from {@link AnnotationMode} should be used;\n * see also {@link RenderParameters} and {@link GetOperatorListParameters}.\n * The default value is `AnnotationMode.ENABLE_FORMS`.\n * @property {number} [annotationEditorMode] - Enables the creation and editing\n * of new Annotations. The constants from {@link AnnotationEditorType} should\n * be used. The default value is `AnnotationEditorType.NONE`.\n * @property {string} [annotationEditorHighlightColors] - A comma separated list\n * of colors to propose to highlight some text in the pdf.\n * @property {string} [imageResourcesPath] - Path for image resources, mainly\n * mainly for annotation icons. Include trailing slash.\n * @property {boolean} [enablePrintAutoRotate] - Enables automatic rotation of\n * landscape pages upon printing. The default is `false`.\n * @property {number} [maxCanvasPixels] - The maximum supported canvas size in\n * total pixels, i.e. width * height. Use `-1` for no limit, or `0` for\n * CSS-only zooming. The default value is 4096 * 8192 (32 mega-pixels).\n * @property {IL10n} [l10n] - Localization service.\n * @property {boolean} [enablePermissions] - Enables PDF document permissions,\n * when they exist. The default value is `false`.\n * @property {Object} [pageColors] - Overwrites background and foreground colors\n * with user defined ones in order to improve readability in high contrast\n * mode.\n */\n\nclass PDFPageViewBuffer {\n // Here we rely on the fact that `Set`s preserve the insertion order.\n #buf = new Set();\n\n #size = 0;\n\n constructor(size) {\n this.#size = size;\n }\n\n push(view) {\n const buf = this.#buf;\n if (buf.has(view)) {\n buf.delete(view); // Move the view to the \"end\" of the buffer.\n }\n buf.add(view);\n\n if (buf.size > this.#size) {\n this.#destroyFirstView();\n }\n }\n\n /**\n * After calling resize, the size of the buffer will be `newSize`.\n * The optional parameter `idsToKeep` is, if present, a Set of page-ids to\n * push to the back of the buffer, delaying their destruction. The size of\n * `idsToKeep` has no impact on the final size of the buffer; if `idsToKeep`\n * is larger than `newSize`, some of those pages will be destroyed anyway.\n */\n resize(newSize, idsToKeep = null) {\n this.#size = newSize;\n\n const buf = this.#buf;\n if (idsToKeep) {\n const ii = buf.size;\n let i = 1;\n for (const view of buf) {\n if (idsToKeep.has(view.id)) {\n buf.delete(view); // Move the view to the \"end\" of the buffer.\n buf.add(view);\n }\n if (++i > ii) {\n break;\n }\n }\n }\n\n while (buf.size > this.#size) {\n this.#destroyFirstView();\n }\n }\n\n has(view) {\n return this.#buf.has(view);\n }\n\n [Symbol.iterator]() {\n return this.#buf.keys();\n }\n\n #destroyFirstView() {\n const firstView = this.#buf.keys().next().value;\n\n firstView?.destroy();\n this.#buf.delete(firstView);\n }\n}\n\n/**\n * Simple viewer control to display PDF content/pages.\n */\nclass PDFViewer {\n #buffer = null;\n\n #altTextManager = null;\n\n #annotationEditorHighlightColors = null;\n\n #annotationEditorMode = AnnotationEditorType.NONE;\n\n #annotationEditorUIManager = null;\n\n #annotationMode = AnnotationMode.ENABLE_FORMS;\n\n #containerTopLeft = null;\n\n #enableHighlightFloatingButton = false;\n\n #enablePermissions = false;\n\n #eventAbortController = null;\n\n #mlManager = null;\n\n #getAllTextInProgress = false;\n\n #hiddenCopyElement = null;\n\n #interruptCopyCondition = false;\n\n #previousContainerHeight = 0;\n\n #resizeObserver = new ResizeObserver(this.#resizeObserverCallback.bind(this));\n\n #scrollModePageState = null;\n\n #scaleTimeoutId = null;\n\n #textLayerMode = TextLayerMode.ENABLE;\n\n /**\n * @param {PDFViewerOptions} options\n */\n constructor(options) {\n const viewerVersion =\n typeof PDFJSDev !== \"undefined\" ? PDFJSDev.eval(\"BUNDLE_VERSION\") : null;\n if (version !== viewerVersion) {\n throw new Error(\n `The API version \"${version}\" does not match the Viewer version \"${viewerVersion}\".`\n );\n }\n this.container = options.container;\n this.viewer = options.viewer || options.container.firstElementChild;\n\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n if (this.container?.tagName !== \"DIV\" || this.viewer?.tagName !== \"DIV\") {\n throw new Error(\"Invalid `container` and/or `viewer` option.\");\n }\n\n if (\n this.container.offsetParent &&\n getComputedStyle(this.container).position !== \"absolute\"\n ) {\n throw new Error(\"The `container` must be absolutely positioned.\");\n }\n }\n this.#resizeObserver.observe(this.container);\n\n this.eventBus = options.eventBus;\n this.linkService = options.linkService || new SimpleLinkService();\n this.downloadManager = options.downloadManager || null;\n this.findController = options.findController || null;\n this.#altTextManager = options.altTextManager || null;\n\n if (this.findController) {\n this.findController.onIsPageVisible = pageNumber =>\n this._getVisiblePages().ids.has(pageNumber);\n }\n this._scriptingManager = options.scriptingManager || null;\n this.#textLayerMode = options.textLayerMode ?? TextLayerMode.ENABLE;\n this.#annotationMode =\n options.annotationMode ?? AnnotationMode.ENABLE_FORMS;\n this.#annotationEditorMode =\n options.annotationEditorMode ?? AnnotationEditorType.NONE;\n this.#annotationEditorHighlightColors =\n options.annotationEditorHighlightColors || null;\n this.#enableHighlightFloatingButton =\n options.enableHighlightFloatingButton === true;\n this.imageResourcesPath = options.imageResourcesPath || \"\";\n this.enablePrintAutoRotate = options.enablePrintAutoRotate || false;\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n this.removePageBorders = options.removePageBorders || false;\n }\n this.maxCanvasPixels = options.maxCanvasPixels;\n this.l10n = options.l10n;\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n this.l10n ||= new GenericL10n();\n }\n this.#enablePermissions = options.enablePermissions || false;\n this.pageColors = options.pageColors || null;\n this.#mlManager = options.mlManager || null;\n\n this.defaultRenderingQueue = !options.renderingQueue;\n if (\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) &&\n this.defaultRenderingQueue\n ) {\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 (\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) &&\n this.removePageBorders\n ) {\n this.viewer.classList.add(\"removePageBorders\");\n }\n\n this.#updateContainerHeightCss();\n\n // Trigger API-cleanup, once thumbnail rendering has finished,\n // if the relevant pageView is *not* cached in the buffer.\n this.eventBus._on(\"thumbnailrendered\", ({ pageNumber, pdfPage }) => {\n const pageView = this._pages[pageNumber - 1];\n if (!this.#buffer.has(pageView)) {\n pdfPage?.cleanup();\n }\n });\n\n if (\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) &&\n !options.l10n\n ) {\n // Ensure that Fluent is connected in e.g. the COMPONENTS build.\n this.l10n.translate(this.container);\n }\n }\n\n get pagesCount() {\n return this._pages.length;\n }\n\n getPageView(index) {\n return this._pages[index];\n }\n\n getCachedPageViews() {\n return new Set(this.#buffer);\n }\n\n /**\n * @type {boolean} - True if all {PDFPageView} objects are initialized.\n */\n get pageViewsReady() {\n // Prevent printing errors when 'disableAutoFetch' is set, by ensuring\n // that *all* pages have in fact been completely loaded.\n return this._pages.every(pageView => pageView?.pdfPage);\n }\n\n /**\n * @type {boolean}\n */\n get renderForms() {\n return this.#annotationMode === AnnotationMode.ENABLE_FORMS;\n }\n\n /**\n * @type {boolean}\n */\n get enableScripting() {\n return !!this._scriptingManager;\n }\n\n /**\n * @type {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(`currentPageNumber: \"${val}\" is not a valid page.`);\n }\n }\n\n /**\n * @returns {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 const previous = this._currentPageNumber;\n this._currentPageNumber = val;\n\n this.eventBus.dispatch(\"pagechanging\", {\n source: this,\n pageNumber: val,\n pageLabel: this._pageLabels?.[val - 1] ?? null,\n previous,\n });\n\n if (resetCurrentPageView) {\n this.#resetCurrentPageView();\n }\n return true;\n }\n\n /**\n * @type {string|null} Returns the current page label, or `null` if no page\n * labels exist.\n */\n get currentPageLabel() {\n return this._pageLabels?.[this._currentPageNumber - 1] ?? null;\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 const 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(`currentPageLabel: \"${val}\" is not a valid page.`);\n }\n }\n\n /**\n * @type {number}\n */\n get currentScale() {\n return this._currentScale !== UNKNOWN_SCALE\n ? 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, { noScroll: false });\n }\n\n /**\n * @type {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, { noScroll: false });\n }\n\n /**\n * @type {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 // Normalize the rotation, by clamping it to the [0, 360) range.\n rotation %= 360;\n if (rotation < 0) {\n rotation += 360;\n }\n if (this._pagesRotation === rotation) {\n return; // The rotation didn't change.\n }\n this._pagesRotation = rotation;\n\n const pageNumber = this._currentPageNumber;\n\n this.refresh(true, { 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, { noScroll: 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 firstPagePromise() {\n return this.pdfDocument ? this._firstPageCapability.promise : null;\n }\n\n get onePageRendered() {\n return this.pdfDocument ? this._onePageRenderedCapability.promise : null;\n }\n\n get pagesPromise() {\n return this.pdfDocument ? this._pagesCapability.promise : null;\n }\n\n get _layerProperties() {\n const self = this;\n return shadow(this, \"_layerProperties\", {\n get annotationEditorUIManager() {\n return self.#annotationEditorUIManager;\n },\n get annotationStorage() {\n return self.pdfDocument?.annotationStorage;\n },\n get downloadManager() {\n return self.downloadManager;\n },\n get enableScripting() {\n return !!self._scriptingManager;\n },\n get fieldObjectsPromise() {\n return self.pdfDocument?.getFieldObjects();\n },\n get findController() {\n return self.findController;\n },\n get hasJSActionsPromise() {\n return self.pdfDocument?.hasJSActions();\n },\n get linkService() {\n return self.linkService;\n },\n });\n }\n\n /**\n * Currently only *some* permissions are supported.\n * @returns {Object}\n */\n #initializePermissions(permissions) {\n const params = {\n annotationEditorMode: this.#annotationEditorMode,\n annotationMode: this.#annotationMode,\n textLayerMode: this.#textLayerMode,\n };\n if (!permissions) {\n return params;\n }\n\n if (\n !permissions.includes(PermissionFlag.COPY) &&\n this.#textLayerMode === TextLayerMode.ENABLE\n ) {\n params.textLayerMode = TextLayerMode.ENABLE_PERMISSIONS;\n }\n\n if (!permissions.includes(PermissionFlag.MODIFY_CONTENTS)) {\n params.annotationEditorMode = AnnotationEditorType.DISABLE;\n }\n\n if (\n !permissions.includes(PermissionFlag.MODIFY_ANNOTATIONS) &&\n !permissions.includes(PermissionFlag.FILL_INTERACTIVE_FORMS) &&\n this.#annotationMode === AnnotationMode.ENABLE_FORMS\n ) {\n params.annotationMode = AnnotationMode.ENABLE;\n }\n\n return params;\n }\n\n async #onePageRenderedOrForceFetch(signal) {\n // Unless the viewer *and* its pages are visible, rendering won't start and\n // `this._onePageRenderedCapability` thus won't be resolved.\n // To ensure that automatic printing, on document load, still works even in\n // those cases we force-allow fetching of all pages when:\n // - The current window/tab is inactive, which will prevent rendering since\n // `requestAnimationFrame` is being used; fixes bug 1746213.\n // - The viewer is hidden in the DOM, e.g. in a `display: none` <iframe>\n // element; fixes bug 1618621.\n // - The viewer is visible, but none of the pages are (e.g. if the\n // viewer is very small); fixes bug 1618955.\n if (\n document.visibilityState === \"hidden\" ||\n !this.container.offsetParent ||\n this._getVisiblePages().views.length === 0\n ) {\n return;\n }\n\n // Handle the window/tab becoming inactive *after* rendering has started;\n // fixes (another part of) bug 1746213.\n const hiddenCapability = Promise.withResolvers();\n function onVisibilityChange() {\n if (document.visibilityState === \"hidden\") {\n hiddenCapability.resolve();\n }\n }\n document.addEventListener(\"visibilitychange\", onVisibilityChange, {\n signal,\n });\n\n await Promise.race([\n this._onePageRenderedCapability.promise,\n hiddenCapability.promise,\n ]);\n // Ensure that the \"visibilitychange\" listener is removed immediately.\n document.removeEventListener(\"visibilitychange\", onVisibilityChange);\n }\n\n async getAllText() {\n const texts = [];\n const buffer = [];\n for (\n let pageNum = 1, pagesCount = this.pdfDocument.numPages;\n pageNum <= pagesCount;\n ++pageNum\n ) {\n if (this.#interruptCopyCondition) {\n return null;\n }\n buffer.length = 0;\n const page = await this.pdfDocument.getPage(pageNum);\n // By default getTextContent pass disableNormalization equals to false\n // which is fine because we want a normalized string.\n const { items } = await page.getTextContent();\n for (const item of items) {\n if (item.str) {\n buffer.push(item.str);\n }\n if (item.hasEOL) {\n buffer.push(\"\\n\");\n }\n }\n texts.push(removeNullCharacters(buffer.join(\"\")));\n }\n\n return texts.join(\"\\n\");\n }\n\n #copyCallback(textLayerMode, event) {\n const selection = document.getSelection();\n const { focusNode, anchorNode } = selection;\n if (\n anchorNode &&\n focusNode &&\n selection.containsNode(this.#hiddenCopyElement)\n ) {\n // About the condition above:\n // - having non-null anchorNode and focusNode are here to guaranty that\n // we have at least a kind of selection.\n // - this.#hiddenCopyElement is an invisible element which is impossible\n // to select manually (its display is none) but ctrl+A will select all\n // including this element so having it in the selection means that all\n // has been selected.\n\n if (\n this.#getAllTextInProgress ||\n textLayerMode === TextLayerMode.ENABLE_PERMISSIONS\n ) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n this.#getAllTextInProgress = true;\n\n // TODO: if all the pages are rendered we don't need to wait for\n // getAllText and we could just get text from the Selection object.\n\n // Select all the document.\n const savedCursor = this.container.style.cursor;\n this.container.style.cursor = \"wait\";\n\n const interruptCopy = ev =>\n (this.#interruptCopyCondition = ev.key === \"Escape\");\n window.addEventListener(\"keydown\", interruptCopy);\n\n this.getAllText()\n .then(async text => {\n if (text !== null) {\n await navigator.clipboard.writeText(text);\n }\n })\n .catch(reason => {\n console.warn(\n `Something goes wrong when extracting the text: ${reason.message}`\n );\n })\n .finally(() => {\n this.#getAllTextInProgress = false;\n this.#interruptCopyCondition = false;\n window.removeEventListener(\"keydown\", interruptCopy);\n this.container.style.cursor = savedCursor;\n });\n\n event.preventDefault();\n event.stopPropagation();\n }\n }\n\n /**\n * @param {PDFDocumentProxy} pdfDocument\n */\n setDocument(pdfDocument) {\n if (this.pdfDocument) {\n this.eventBus.dispatch(\"pagesdestroy\", { source: this });\n\n this._cancelRendering();\n this._resetView();\n\n this.findController?.setDocument(null);\n this._scriptingManager?.setDocument(null);\n\n if (this.#annotationEditorUIManager) {\n this.#annotationEditorUIManager.destroy();\n this.#annotationEditorUIManager = null;\n }\n }\n\n this.pdfDocument = pdfDocument;\n if (!pdfDocument) {\n return;\n }\n const pagesCount = pdfDocument.numPages;\n const firstPagePromise = pdfDocument.getPage(1);\n // Rendering (potentially) depends on this, hence fetching it immediately.\n const optionalContentConfigPromise = pdfDocument.getOptionalContentConfig({\n intent: \"display\",\n });\n const permissionsPromise = this.#enablePermissions\n ? pdfDocument.getPermissions()\n : Promise.resolve();\n\n const { eventBus, pageColors, viewer } = this;\n\n this.#eventAbortController = new AbortController();\n const { signal } = this.#eventAbortController;\n\n // Given that browsers don't handle huge amounts of DOM-elements very well,\n // enforce usage of PAGE-scrolling when loading *very* long/large documents.\n if (pagesCount > PagesCountLimit.FORCE_SCROLL_MODE_PAGE) {\n console.warn(\n \"Forcing PAGE-scrolling for performance reasons, given the length of the document.\"\n );\n const mode = (this._scrollMode = ScrollMode.PAGE);\n eventBus.dispatch(\"scrollmodechanged\", { source: this, mode });\n }\n\n this._pagesCapability.promise.then(\n () => {\n eventBus.dispatch(\"pagesloaded\", { source: this, pagesCount });\n },\n () => {\n /* Prevent \"Uncaught (in promise)\"-messages in the console. */\n }\n );\n\n const onBeforeDraw = evt => {\n const pageView = this._pages[evt.pageNumber - 1];\n if (!pageView) {\n return;\n }\n // Add the page to the buffer at the start of drawing. That way it can be\n // evicted from the buffer and destroyed even if we pause its rendering.\n this.#buffer.push(pageView);\n };\n eventBus._on(\"pagerender\", onBeforeDraw, { signal });\n\n const onAfterDraw = evt => {\n if (evt.cssTransform) {\n return;\n }\n this._onePageRenderedCapability.resolve({ timestamp: evt.timestamp });\n\n eventBus._off(\"pagerendered\", onAfterDraw); // Remove immediately.\n };\n eventBus._on(\"pagerendered\", onAfterDraw, { signal });\n\n // Fetch a single page so we can get a viewport that will be the default\n // viewport for all pages\n Promise.all([firstPagePromise, permissionsPromise])\n .then(([firstPdfPage, permissions]) => {\n if (pdfDocument !== this.pdfDocument) {\n return; // The document was closed while the first page resolved.\n }\n this._firstPageCapability.resolve(firstPdfPage);\n this._optionalContentConfigPromise = optionalContentConfigPromise;\n\n const { annotationEditorMode, annotationMode, textLayerMode } =\n this.#initializePermissions(permissions);\n\n if (textLayerMode !== TextLayerMode.DISABLE) {\n const element = (this.#hiddenCopyElement =\n document.createElement(\"div\"));\n element.id = \"hiddenCopyElement\";\n viewer.before(element);\n }\n\n if (annotationEditorMode !== AnnotationEditorType.DISABLE) {\n const mode = annotationEditorMode;\n\n if (pdfDocument.isPureXfa) {\n console.warn(\"Warning: XFA-editing is not implemented.\");\n } else if (isValidAnnotationEditorMode(mode)) {\n this.#annotationEditorUIManager = new AnnotationEditorUIManager(\n this.container,\n viewer,\n this.#altTextManager,\n eventBus,\n pdfDocument,\n pageColors,\n this.#annotationEditorHighlightColors,\n this.#enableHighlightFloatingButton,\n this.#mlManager\n );\n eventBus.dispatch(\"annotationeditoruimanager\", {\n source: this,\n uiManager: this.#annotationEditorUIManager,\n });\n if (mode !== AnnotationEditorType.NONE) {\n this.#annotationEditorUIManager.updateMode(mode);\n }\n } else {\n console.error(`Invalid AnnotationEditor mode: ${mode}`);\n }\n }\n\n const viewerElement =\n this._scrollMode === ScrollMode.PAGE ? null : viewer;\n const scale = this.currentScale;\n const viewport = firstPdfPage.getViewport({\n scale: scale * PixelsPerInch.PDF_TO_CSS_UNITS,\n });\n // Ensure that the various layers always get the correct initial size,\n // see issue 15795.\n viewer.style.setProperty(\"--scale-factor\", viewport.scale);\n if (\n pageColors?.foreground === \"CanvasText\" ||\n pageColors?.background === \"Canvas\"\n ) {\n viewer.style.setProperty(\n \"--hcm-highlight-filter\",\n pdfDocument.filterFactory.addHighlightHCMFilter(\n \"highlight\",\n \"CanvasText\",\n \"Canvas\",\n \"HighlightText\",\n \"Highlight\"\n )\n );\n viewer.style.setProperty(\n \"--hcm-highlight-selected-filter\",\n pdfDocument.filterFactory.addHighlightHCMFilter(\n \"highlight_selected\",\n \"CanvasText\",\n \"Canvas\",\n \"HighlightText\",\n \"ButtonText\"\n )\n );\n }\n\n for (let pageNum = 1; pageNum <= pagesCount; ++pageNum) {\n const pageView = new PDFPageView({\n container: viewerElement,\n eventBus,\n id: pageNum,\n scale,\n defaultViewport: viewport.clone(),\n optionalContentConfigPromise,\n renderingQueue: this.renderingQueue,\n textLayerMode,\n annotationMode,\n imageResourcesPath: this.imageResourcesPath,\n maxCanvasPixels: this.maxCanvasPixels,\n pageColors,\n l10n: this.l10n,\n layerProperties: this._layerProperties,\n });\n this._pages.push(pageView);\n }\n // Set the first `pdfPage` immediately, since it's already loaded,\n // rather than having to repeat the `PDFDocumentProxy.getPage` call in\n // the `this.#ensurePdfPageLoaded` method before rendering can start.\n this._pages[0]?.setPdfPage(firstPdfPage);\n\n if (this._scrollMode === ScrollMode.PAGE) {\n // Ensure that the current page becomes visible on document load.\n this.#ensurePageViewVisible();\n } else 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 this.#onePageRenderedOrForceFetch(signal).then(async () => {\n if (pdfDocument !== this.pdfDocument) {\n return; // The document was closed while the first page rendered.\n }\n this.findController?.setDocument(pdfDocument); // Enable searching.\n this._scriptingManager?.setDocument(pdfDocument); // Enable scripting.\n\n if (this.#hiddenCopyElement) {\n document.addEventListener(\n \"copy\",\n this.#copyCallback.bind(this, textLayerMode),\n { signal }\n );\n }\n\n if (this.#annotationEditorUIManager) {\n // Ensure that the Editor buttons, in the toolbar, are updated.\n eventBus.dispatch(\"annotationeditormodechanged\", {\n source: this,\n mode: this.#annotationEditorMode,\n });\n }\n\n // In addition to 'disableAutoFetch' being set, also attempt to reduce\n // resource usage when loading *very* long/large documents.\n if (\n pdfDocument.loadingParams.disableAutoFetch ||\n pagesCount > PagesCountLimit.FORCE_LAZY_PAGE_INIT\n ) {\n // XXX: Printing is semi-broken with auto fetch disabled.\n this._pagesCapability.resolve();\n return;\n }\n let getPagesLeft = pagesCount - 1; // The first page was already loaded.\n\n if (getPagesLeft <= 0) {\n this._pagesCapability.resolve();\n return;\n }\n for (let pageNum = 2; pageNum <= pagesCount; ++pageNum) {\n const promise = pdfDocument.getPage(pageNum).then(\n pdfPage => {\n const pageView = this._pages[pageNum - 1];\n if (!pageView.pdfPage) {\n pageView.setPdfPage(pdfPage);\n }\n if (--getPagesLeft === 0) {\n this._pagesCapability.resolve();\n }\n },\n reason => {\n console.error(\n `Unable to get page ${pageNum} to initialize viewer`,\n reason\n );\n if (--getPagesLeft === 0) {\n this._pagesCapability.resolve();\n }\n }\n );\n\n if (pageNum % PagesCountLimit.PAUSE_EAGER_PAGE_INIT === 0) {\n await promise;\n }\n }\n });\n\n eventBus.dispatch(\"pagesinit\", { source: this });\n\n pdfDocument.getMetadata().then(({ info }) => {\n if (pdfDocument !== this.pdfDocument) {\n return; // The document was closed while the metadata resolved.\n }\n if (info.Language) {\n viewer.lang = info.Language;\n }\n });\n\n if (this.defaultRenderingQueue) {\n this.update();\n }\n })\n .catch(reason => {\n console.error(\"Unable to initialize viewer\", reason);\n\n this._pagesCapability.reject(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 (\n !(Array.isArray(labels) && this.pdfDocument.numPages === labels.length)\n ) {\n this._pageLabels = null;\n console.error(`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 this._pages[i].setPageLabel(this._pageLabels?.[i] ?? null);\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._optionalContentConfigPromise = null;\n this._firstPageCapability = Promise.withResolvers();\n this._onePageRenderedCapability = Promise.withResolvers();\n this._pagesCapability = Promise.withResolvers();\n this._scrollMode = ScrollMode.VERTICAL;\n this._previousScrollMode = ScrollMode.UNKNOWN;\n this._spreadMode = SpreadMode.NONE;\n\n this.#scrollModePageState = {\n previousPageNumber: 1,\n scrollDown: true,\n pages: [],\n };\n\n this.#eventAbortController?.abort();\n this.#eventAbortController = null;\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 this.viewer.removeAttribute(\"lang\");\n\n this.#hiddenCopyElement?.remove();\n this.#hiddenCopyElement = null;\n }\n\n #ensurePageViewVisible() {\n if (this._scrollMode !== ScrollMode.PAGE) {\n throw new Error(\"#ensurePageViewVisible: Invalid scrollMode value.\");\n }\n const pageNumber = this._currentPageNumber,\n state = this.#scrollModePageState,\n viewer = this.viewer;\n\n // Temporarily remove all the pages from the DOM...\n viewer.textContent = \"\";\n // ... and clear out the active ones.\n state.pages.length = 0;\n\n if (this._spreadMode === SpreadMode.NONE && !this.isInPresentationMode) {\n // Finally, append the new page to the viewer.\n const pageView = this._pages[pageNumber - 1];\n viewer.append(pageView.div);\n\n state.pages.push(pageView);\n } else {\n const pageIndexSet = new Set(),\n parity = this._spreadMode - 1;\n\n // Determine the pageIndices in the new spread.\n if (parity === -1) {\n // PresentationMode is active, with `SpreadMode.NONE` set.\n pageIndexSet.add(pageNumber - 1);\n } else if (pageNumber % 2 !== parity) {\n // Left-hand side page.\n pageIndexSet.add(pageNumber - 1);\n pageIndexSet.add(pageNumber);\n } else {\n // Right-hand side page.\n pageIndexSet.add(pageNumber - 2);\n pageIndexSet.add(pageNumber - 1);\n }\n\n // Finally, append the new pages to the viewer and apply the spreadMode.\n const spread = document.createElement(\"div\");\n spread.className = \"spread\";\n\n if (this.isInPresentationMode) {\n const dummyPage = document.createElement(\"div\");\n dummyPage.className = \"dummyPage\";\n spread.append(dummyPage);\n }\n\n for (const i of pageIndexSet) {\n const pageView = this._pages[i];\n if (!pageView) {\n continue;\n }\n spread.append(pageView.div);\n\n state.pages.push(pageView);\n }\n viewer.append(spread);\n }\n\n state.scrollDown = pageNumber >= state.previousPageNumber;\n state.previousPageNumber = pageNumber;\n }\n\n _scrollUpdate() {\n if (this.pagesCount === 0) {\n return;\n }\n this.update();\n }\n\n #scrollIntoView(pageView, pageSpot = null) {\n const { div, id } = pageView;\n\n // Ensure that `this._currentPageNumber` is correct, when `#scrollIntoView`\n // is called directly (and not from `#resetCurrentPageView`).\n if (this._currentPageNumber !== id) {\n this._setCurrentPageNumber(id);\n }\n if (this._scrollMode === ScrollMode.PAGE) {\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\n if (!pageSpot && !this.isInPresentationMode) {\n const left = div.offsetLeft + div.clientLeft,\n right = left + div.clientWidth;\n const { scrollLeft, clientWidth } = this.container;\n if (\n this._scrollMode === ScrollMode.HORIZONTAL ||\n left < scrollLeft ||\n right > scrollLeft + clientWidth\n ) {\n pageSpot = { left: 0, top: 0 };\n }\n }\n scrollIntoView(div, pageSpot);\n\n // Ensure that the correct *initial* document position is set, when any\n // OpenParameters are used, for documents with non-default Scroll/Spread\n // modes (fixes issue 15695). This is necessary since the scroll-handler\n // invokes the `update`-method asynchronously, and `this._location` could\n // thus be wrong when the initial zooming occurs in the default viewer.\n if (!this._currentScaleValue && this._location) {\n this._location = null;\n }\n }\n\n /**\n * Prevent unnecessary re-rendering of all pages when the scale changes\n * only because of limited numerical precision.\n */\n #isSameScale(newScale) {\n return (\n newScale === this._currentScale ||\n Math.abs(newScale - this._currentScale) < 1e-15\n );\n }\n\n #setScaleUpdatePages(\n newScale,\n newValue,\n { noScroll = false, preset = false, drawingDelay = -1 }\n ) {\n this._currentScaleValue = newValue.toString();\n\n if (this.#isSameScale(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 this.viewer.style.setProperty(\n \"--scale-factor\",\n newScale * PixelsPerInch.PDF_TO_CSS_UNITS\n );\n\n const postponeDrawing = drawingDelay >= 0 && drawingDelay < 1000;\n this.refresh(true, {\n scale: newScale,\n drawingDelay: postponeDrawing ? drawingDelay : -1,\n });\n\n if (postponeDrawing) {\n this.#scaleTimeoutId = setTimeout(() => {\n this.#scaleTimeoutId = null;\n this.refresh();\n }, drawingDelay);\n }\n\n this._currentScale = newScale;\n\n if (!noScroll) {\n let page = this._currentPageNumber,\n dest;\n if (\n this._location &&\n !(this.isInPresentationMode || this.isChangingPresentationMode)\n ) {\n page = this._location.pageNumber;\n dest = [\n null,\n { name: \"XYZ\" },\n this._location.left,\n this._location.top,\n null,\n ];\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 get #pageWidthScaleFactor() {\n if (\n this._spreadMode !== SpreadMode.NONE &&\n this._scrollMode !== ScrollMode.HORIZONTAL\n ) {\n return 2;\n }\n return 1;\n }\n\n #setScale(value, options) {\n let scale = parseFloat(value);\n\n if (scale > 0) {\n options.preset = false;\n this.#setScaleUpdatePages(scale, value, options);\n } else {\n const currentPage = this._pages[this._currentPageNumber - 1];\n if (!currentPage) {\n return;\n }\n let hPadding = SCROLLBAR_PADDING,\n vPadding = VERTICAL_PADDING;\n\n if (this.isInPresentationMode) {\n // Pages have a 2px (transparent) border in PresentationMode, see\n // the `web/pdf_viewer.css` file.\n hPadding = vPadding = 4; // 2 * 2px\n if (this._spreadMode !== SpreadMode.NONE) {\n // Account for two pages being visible in PresentationMode, thus\n // \"doubling\" the total border width.\n hPadding *= 2;\n }\n } else if (\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) &&\n this.removePageBorders\n ) {\n hPadding = vPadding = 0;\n } else if (this._scrollMode === ScrollMode.HORIZONTAL) {\n [hPadding, vPadding] = [vPadding, hPadding]; // Swap the padding values.\n }\n const pageWidthScale =\n (((this.container.clientWidth - hPadding) / currentPage.width) *\n currentPage.scale) /\n this.#pageWidthScaleFactor;\n const pageHeightScale =\n ((this.container.clientHeight - vPadding) / currentPage.height) *\n 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 const horizontalScale = isPortraitOrientation(currentPage)\n ? pageWidthScale\n : Math.min(pageHeightScale, pageWidthScale);\n scale = Math.min(MAX_AUTO_SCALE, horizontalScale);\n break;\n default:\n console.error(`#setScale: \"${value}\" is an unknown zoom value.`);\n return;\n }\n options.preset = true;\n this.#setScaleUpdatePages(scale, value, options);\n }\n }\n\n /**\n * Refreshes page view: scrolls to the current page and updates the scale.\n */\n #resetCurrentPageView() {\n const pageView = this._pages[this._currentPageNumber - 1];\n\n if (this.isInPresentationMode) {\n // Fixes the case when PDF has different page sizes.\n this.#setScale(this._currentScaleValue, { noScroll: true });\n }\n this.#scrollIntoView(pageView);\n }\n\n /**\n * @param {string} label - The page label.\n * @returns {number|null} The page number corresponding to the page label,\n * or `null` when no page labels exist and/or the input is invalid.\n */\n pageLabelToPageNumber(label) {\n if (!this._pageLabels) {\n return null;\n }\n const i = this._pageLabels.indexOf(label);\n if (i < 0) {\n return null;\n }\n return i + 1;\n }\n\n /**\n * @typedef {Object} ScrollPageIntoViewParameters\n * @property {number} pageNumber - The page number.\n * @property {Array} [destArray] - The original PDF destination array, in the\n * format: <page-ref> </XYZ|/FitXXX> <args..>\n * @property {boolean} [allowNegativeOffset] - Allow negative page offsets.\n * The default value is `false`.\n * @property {boolean} [ignoreDestinationZoom] - Ignore the zoom argument in\n * the destination array. The default value is `false`.\n */\n\n /**\n * Scrolls page into view.\n * @param {ScrollPageIntoViewParameters} params\n */\n scrollPageIntoView({\n pageNumber,\n destArray = null,\n allowNegativeOffset = false,\n ignoreDestinationZoom = false,\n }) {\n if (!this.pdfDocument) {\n return;\n }\n const pageView =\n Number.isInteger(pageNumber) && this._pages[pageNumber - 1];\n if (!pageView) {\n console.error(\n `scrollPageIntoView: \"${pageNumber}\" is not a valid pageNumber parameter.`\n );\n return;\n }\n\n if (this.isInPresentationMode || !destArray) {\n this._setCurrentPageNumber(pageNumber, /* resetCurrentPageView = */ true);\n return;\n }\n let x = 0,\n y = 0;\n let width = 0,\n height = 0,\n widthScale,\n heightScale;\n const changeOrientation = pageView.rotation % 180 !== 0;\n const pageWidth =\n (changeOrientation ? pageView.height : pageView.width) /\n pageView.scale /\n PixelsPerInch.PDF_TO_CSS_UNITS;\n const pageHeight =\n (changeOrientation ? pageView.width : pageView.height) /\n pageView.scale /\n PixelsPerInch.PDF_TO_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 } else if (typeof y !== \"number\" || y < 0) {\n // The \"top\" value isn't optional, according to the spec, however some\n // bad PDF generators will pretend that it is (fixes bug 1663390).\n y = pageHeight;\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 = SCROLLBAR_PADDING,\n vPadding = VERTICAL_PADDING;\n\n if (\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) &&\n this.removePageBorders\n ) {\n hPadding = vPadding = 0;\n }\n widthScale =\n (this.container.clientWidth - hPadding) /\n width /\n PixelsPerInch.PDF_TO_CSS_UNITS;\n heightScale =\n (this.container.clientHeight - vPadding) /\n height /\n PixelsPerInch.PDF_TO_CSS_UNITS;\n scale = Math.min(Math.abs(widthScale), Math.abs(heightScale));\n break;\n default:\n console.error(\n `scrollPageIntoView: \"${destArray[1].name}\" is not a valid destination type.`\n );\n return;\n }\n\n if (!ignoreDestinationZoom) {\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\n if (scale === \"page-fit\" && !destArray[4]) {\n this.#scrollIntoView(pageView);\n return;\n }\n\n const 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(pageView, /* pageSpot = */ { left, top });\n }\n\n _updateLocation(firstPage) {\n const currentScale = this._currentScale;\n const currentScaleValue = this._currentScaleValue;\n const normalizedScaleValue =\n parseFloat(currentScaleValue) === currentScale\n ? Math.round(currentScale * 10000) / 100\n : currentScaleValue;\n\n const pageNumber = firstPage.id;\n const currentPageView = this._pages[pageNumber - 1];\n const container = this.container;\n const topLeft = currentPageView.getPagePoint(\n container.scrollLeft - firstPage.x,\n container.scrollTop - firstPage.y\n );\n const intLeft = Math.round(topLeft[0]);\n const intTop = Math.round(topLeft[1]);\n\n let pdfOpenParams = `#page=${pageNumber}`;\n if (!this.isInPresentationMode) {\n pdfOpenParams += `&zoom=${normalizedScaleValue},${intLeft},${intTop}`;\n }\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 const visible = this._getVisiblePages();\n const visiblePages = visible.views,\n 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, visible.ids);\n\n this.renderingQueue.renderHighestPriority(visible);\n\n const isSimpleLayout =\n this._spreadMode === SpreadMode.NONE &&\n (this._scrollMode === ScrollMode.PAGE ||\n this._scrollMode === ScrollMode.VERTICAL);\n const 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 && isSimpleLayout) {\n stillFullyVisible = true;\n break;\n }\n }\n this._setCurrentPageNumber(\n stillFullyVisible ? currentId : visiblePages[0].id\n );\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 _isContainerRtl() {\n return getComputedStyle(this.container).direction === \"rtl\";\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\n : this.container.scrollWidth > this.container.clientWidth;\n }\n\n get isVerticalScrollbarEnabled() {\n return this.isInPresentationMode\n ? false\n : this.container.scrollHeight > this.container.clientHeight;\n }\n\n _getVisiblePages() {\n const views =\n this._scrollMode === ScrollMode.PAGE\n ? this.#scrollModePageState.pages\n : this._pages,\n horizontal = this._scrollMode === ScrollMode.HORIZONTAL,\n rtl = horizontal && this._isContainerRtl;\n\n return getVisibleElements({\n scrollEl: this.container,\n views,\n sortByVisibility: true,\n horizontal,\n rtl,\n });\n }\n\n cleanup() {\n for (const pageView of this._pages) {\n if (pageView.renderingState !== RenderingStates.FINISHED) {\n pageView.reset();\n }\n }\n }\n\n /**\n * @private\n */\n _cancelRendering() {\n for (const pageView of this._pages) {\n pageView.cancelRendering();\n }\n }\n\n /**\n * @param {PDFPageView} pageView\n * @returns {Promise<PDFPageProxy | null>}\n */\n async #ensurePdfPageLoaded(pageView) {\n if (pageView.pdfPage) {\n return pageView.pdfPage;\n }\n try {\n const pdfPage = await this.pdfDocument.getPage(pageView.id);\n if (!pageView.pdfPage) {\n pageView.setPdfPage(pdfPage);\n }\n return pdfPage;\n } catch (reason) {\n console.error(\"Unable to get page for page view\", reason);\n return null; // Page error -- there is nothing that can be done.\n }\n }\n\n #getScrollAhead(visible) {\n if (visible.first?.id === 1) {\n return true;\n } else if (visible.last?.id === this.pagesCount) {\n return false;\n }\n switch (this._scrollMode) {\n case ScrollMode.PAGE:\n return this.#scrollModePageState.scrollDown;\n case ScrollMode.HORIZONTAL:\n return this.scroll.right;\n }\n return this.scroll.down;\n }\n\n forceRendering(currentlyVisiblePages) {\n const visiblePages = currentlyVisiblePages || this._getVisiblePages();\n const scrollAhead = this.#getScrollAhead(visiblePages);\n const preRenderExtra =\n this._spreadMode !== SpreadMode.NONE &&\n this._scrollMode !== ScrollMode.HORIZONTAL;\n\n const pageView = this.renderingQueue.getHighestPriority(\n visiblePages,\n this._pages,\n scrollAhead,\n preRenderExtra\n );\n\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 * @type {boolean} Whether all pages of the PDF document have identical\n * widths and heights.\n */\n get hasEqualPageSizes() {\n const firstPageView = this._pages[0];\n for (let i = 1, ii = this._pages.length; i < ii; ++i) {\n const pageView = this._pages[i];\n if (\n pageView.width !== firstPageView.width ||\n pageView.height !== firstPageView.height\n ) {\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 initialOrientation;\n return this._pages.map(pageView => {\n const viewport = pageView.pdfPage.getViewport({ scale: 1 });\n const orientation = isPortraitOrientation(viewport);\n if (initialOrientation === undefined) {\n initialOrientation = orientation;\n } else if (\n this.enablePrintAutoRotate &&\n orientation !== initialOrientation\n ) {\n // Rotate to fit the initial orientation.\n return {\n width: viewport.height,\n height: viewport.width,\n rotation: (viewport.rotation - 90) % 360,\n };\n }\n return {\n width: viewport.width,\n height: viewport.height,\n rotation: viewport.rotation,\n };\n });\n }\n\n /**\n * @type {Promise<OptionalContentConfig | null>}\n */\n get optionalContentConfigPromise() {\n if (!this.pdfDocument) {\n return Promise.resolve(null);\n }\n if (!this._optionalContentConfigPromise) {\n console.error(\"optionalContentConfigPromise: Not initialized yet.\");\n // Prevent issues if the getter is accessed *before* the `onePageRendered`\n // promise has resolved; won't (normally) happen in the default viewer.\n return this.pdfDocument.getOptionalContentConfig({ intent: \"display\" });\n }\n return this._optionalContentConfigPromise;\n }\n\n /**\n * @param {Promise<OptionalContentConfig>} promise - A promise that is\n * resolved with an {@link OptionalContentConfig} instance.\n */\n set optionalContentConfigPromise(promise) {\n if (!(promise instanceof Promise)) {\n throw new Error(`Invalid optionalContentConfigPromise: ${promise}`);\n }\n if (!this.pdfDocument) {\n return;\n }\n if (!this._optionalContentConfigPromise) {\n // Ignore the setter *before* the `onePageRendered` promise has resolved,\n // since it'll be overwritten anyway; won't happen in the default viewer.\n return;\n }\n this._optionalContentConfigPromise = promise;\n\n this.refresh(false, { optionalContentConfigPromise: promise });\n\n this.eventBus.dispatch(\"optionalcontentconfigchanged\", {\n source: this,\n promise,\n });\n }\n\n /**\n * @type {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 (\n typeof PDFJSDev === \"undefined\"\n ? window.isGECKOVIEW\n : PDFJSDev.test(\"GECKOVIEW\")\n ) {\n // NOTE: Always ignore the pageLayout in GeckoView since there's\n // no UI available to change Scroll/Spread modes for the user.\n return;\n }\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 if (this.pagesCount > PagesCountLimit.FORCE_SCROLL_MODE_PAGE) {\n return; // Disabled for performance reasons.\n }\n this._previousScrollMode = this._scrollMode;\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,\n viewer = this.viewer;\n\n viewer.classList.toggle(\n \"scrollHorizontal\",\n scrollMode === ScrollMode.HORIZONTAL\n );\n viewer.classList.toggle(\"scrollWrapped\", scrollMode === ScrollMode.WRAPPED);\n\n if (!this.pdfDocument || !pageNumber) {\n return;\n }\n\n if (scrollMode === ScrollMode.PAGE) {\n this.#ensurePageViewVisible();\n } else if (this._previousScrollMode === ScrollMode.PAGE) {\n // Ensure that the current spreadMode is still applied correctly when\n // the *previous* scrollMode was `ScrollMode.PAGE`.\n this._updateSpreadMode();\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, { noScroll: true });\n }\n this._setCurrentPageNumber(pageNumber, /* resetCurrentPageView = */ true);\n this.update();\n }\n\n /**\n * @type {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 (\n typeof PDFJSDev === \"undefined\"\n ? window.isGECKOVIEW\n : PDFJSDev.test(\"GECKOVIEW\")\n ) {\n // NOTE: Always ignore the pageLayout in GeckoView since there's\n // no UI available to change Scroll/Spread modes for the user.\n return;\n }\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,\n pages = this._pages;\n\n if (this._scrollMode === ScrollMode.PAGE) {\n this.#ensurePageViewVisible();\n } else {\n // Temporarily remove all the pages from the DOM.\n viewer.textContent = \"\";\n\n if (this._spreadMode === SpreadMode.NONE) {\n for (const pageView of this._pages) {\n viewer.append(pageView.div);\n }\n } else {\n const parity = this._spreadMode - 1;\n let spread = null;\n for (let i = 0, ii = pages.length; i < ii; ++i) {\n if (spread === null) {\n spread = document.createElement(\"div\");\n spread.className = \"spread\";\n viewer.append(spread);\n } else if (i % 2 === parity) {\n spread = spread.cloneNode(false);\n viewer.append(spread);\n }\n spread.append(pages[i].div);\n }\n }\n }\n\n if (!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, { noScroll: true });\n }\n this._setCurrentPageNumber(pageNumber, /* resetCurrentPageView = */ true);\n this.update();\n }\n\n /**\n * @private\n */\n _getPageAdvance(currentPageNumber, previous = false) {\n switch (this._scrollMode) {\n case ScrollMode.WRAPPED: {\n const { views } = this._getVisiblePages(),\n pageLayout = new Map();\n\n // Determine the current (visible) page layout.\n for (const { id, y, percent, widthPercent } of views) {\n if (percent === 0 || widthPercent < 100) {\n continue;\n }\n let yArray = pageLayout.get(y);\n if (!yArray) {\n pageLayout.set(y, (yArray ||= []));\n }\n yArray.push(id);\n }\n // Find the row of the current page.\n for (const yArray of pageLayout.values()) {\n const currentIndex = yArray.indexOf(currentPageNumber);\n if (currentIndex === -1) {\n continue;\n }\n const numPages = yArray.length;\n if (numPages === 1) {\n break;\n }\n // Handle documents with varying page sizes.\n if (previous) {\n for (let i = currentIndex - 1, ii = 0; i >= ii; i--) {\n const currentId = yArray[i],\n expectedId = yArray[i + 1] - 1;\n if (currentId < expectedId) {\n return currentPageNumber - expectedId;\n }\n }\n } else {\n for (let i = currentIndex + 1, ii = numPages; i < ii; i++) {\n const currentId = yArray[i],\n expectedId = yArray[i - 1] + 1;\n if (currentId > expectedId) {\n return expectedId - currentPageNumber;\n }\n }\n }\n // The current row is \"complete\", advance to the previous/next one.\n if (previous) {\n const firstId = yArray[0];\n if (firstId < currentPageNumber) {\n return currentPageNumber - firstId + 1;\n }\n } else {\n const lastId = yArray[numPages - 1];\n if (lastId > currentPageNumber) {\n return lastId - currentPageNumber + 1;\n }\n }\n break;\n }\n break;\n }\n case ScrollMode.HORIZONTAL: {\n break;\n }\n case ScrollMode.PAGE:\n case ScrollMode.VERTICAL: {\n if (this._spreadMode === SpreadMode.NONE) {\n break; // Normal vertical scrolling.\n }\n const parity = this._spreadMode - 1;\n\n if (previous && currentPageNumber % 2 !== parity) {\n break; // Left-hand side page.\n } else if (!previous && currentPageNumber % 2 === parity) {\n break; // Right-hand side page.\n }\n const { views } = this._getVisiblePages(),\n expectedId = previous ? currentPageNumber - 1 : currentPageNumber + 1;\n\n for (const { id, percent, widthPercent } of views) {\n if (id !== expectedId) {\n continue;\n }\n if (percent > 0 && widthPercent === 100) {\n return 2;\n }\n break;\n }\n break;\n }\n }\n return 1;\n }\n\n /**\n * Go to the next page, taking scroll/spread-modes into account.\n * @returns {boolean} Whether navigation occurred.\n */\n nextPage() {\n const currentPageNumber = this._currentPageNumber,\n pagesCount = this.pagesCount;\n\n if (currentPageNumber >= pagesCount) {\n return false;\n }\n const advance =\n this._getPageAdvance(currentPageNumber, /* previous = */ false) || 1;\n\n this.currentPageNumber = Math.min(currentPageNumber + advance, pagesCount);\n return true;\n }\n\n /**\n * Go to the previous page, taking scroll/spread-modes into account.\n * @returns {boolean} Whether navigation occurred.\n */\n previousPage() {\n const currentPageNumber = this._currentPageNumber;\n\n if (currentPageNumber <= 1) {\n return false;\n }\n const advance =\n this._getPageAdvance(currentPageNumber, /* previous = */ true) || 1;\n\n this.currentPageNumber = Math.max(currentPageNumber - advance, 1);\n return true;\n }\n\n /**\n * @typedef {Object} ChangeScaleOptions\n * @property {number} [drawingDelay]\n * @property {number} [scaleFactor]\n * @property {number} [steps]\n */\n\n /**\n * Increase the current zoom level one, or more, times.\n * @param {ChangeScaleOptions} [options]\n */\n increaseScale({ drawingDelay, scaleFactor, steps } = {}) {\n if (!this.pdfDocument) {\n return;\n }\n let newScale = this._currentScale;\n if (scaleFactor > 1) {\n newScale = Math.round(newScale * scaleFactor * 100) / 100;\n } else {\n steps ??= 1;\n do {\n newScale =\n Math.ceil((newScale * DEFAULT_SCALE_DELTA).toFixed(2) * 10) / 10;\n } while (--steps > 0 && newScale < MAX_SCALE);\n }\n this.#setScale(Math.min(MAX_SCALE, newScale), {\n noScroll: false,\n drawingDelay,\n });\n }\n\n /**\n * Decrease the current zoom level one, or more, times.\n * @param {ChangeScaleOptions} [options]\n */\n decreaseScale({ drawingDelay, scaleFactor, steps } = {}) {\n if (!this.pdfDocument) {\n return;\n }\n let newScale = this._currentScale;\n if (scaleFactor > 0 && scaleFactor < 1) {\n newScale = Math.round(newScale * scaleFactor * 100) / 100;\n } else {\n steps ??= 1;\n do {\n newScale =\n Math.floor((newScale / DEFAULT_SCALE_DELTA).toFixed(2) * 10) / 10;\n } while (--steps > 0 && newScale > MIN_SCALE);\n }\n this.#setScale(Math.max(MIN_SCALE, newScale), {\n noScroll: false,\n drawingDelay,\n });\n }\n\n #updateContainerHeightCss(height = this.container.clientHeight) {\n if (height !== this.#previousContainerHeight) {\n this.#previousContainerHeight = height;\n docStyle.setProperty(\"--viewer-container-height\", `${height}px`);\n }\n }\n\n #resizeObserverCallback(entries) {\n for (const entry of entries) {\n if (entry.target === this.container) {\n this.#updateContainerHeightCss(\n Math.floor(entry.borderBoxSize[0].blockSize)\n );\n this.#containerTopLeft = null;\n break;\n }\n }\n }\n\n get containerTopLeft() {\n return (this.#containerTopLeft ||= [\n this.container.offsetTop,\n this.container.offsetLeft,\n ]);\n }\n\n get annotationEditorMode() {\n return this.#annotationEditorUIManager\n ? this.#annotationEditorMode\n : AnnotationEditorType.DISABLE;\n }\n\n /**\n * @typedef {Object} AnnotationEditorModeOptions\n * @property {number} mode - The editor mode (none, FreeText, ink, ...).\n * @property {string|null} [editId] - ID of the existing annotation to edit.\n * @property {boolean} [isFromKeyboard] - True if the mode change is due to a\n * keyboard action.\n */\n\n /**\n * @param {AnnotationEditorModeOptions} options\n */\n set annotationEditorMode({ mode, editId = null, isFromKeyboard = false }) {\n if (!this.#annotationEditorUIManager) {\n throw new Error(`The AnnotationEditor is not enabled.`);\n }\n if (this.#annotationEditorMode === mode) {\n return; // The AnnotationEditor mode didn't change.\n }\n if (!isValidAnnotationEditorMode(mode)) {\n throw new Error(`Invalid AnnotationEditor mode: ${mode}`);\n }\n if (!this.pdfDocument) {\n return;\n }\n this.#annotationEditorMode = mode;\n this.eventBus.dispatch(\"annotationeditormodechanged\", {\n source: this,\n mode,\n });\n\n this.#annotationEditorUIManager.updateMode(mode, editId, isFromKeyboard);\n }\n\n // eslint-disable-next-line accessor-pairs\n set annotationEditorParams({ type, value }) {\n if (!this.#annotationEditorUIManager) {\n throw new Error(`The AnnotationEditor is not enabled.`);\n }\n this.#annotationEditorUIManager.updateParams(type, value);\n }\n\n refresh(noUpdate = false, updateArgs = Object.create(null)) {\n if (!this.pdfDocument) {\n return;\n }\n for (const pageView of this._pages) {\n pageView.update(updateArgs);\n }\n if (this.#scaleTimeoutId !== null) {\n clearTimeout(this.#scaleTimeoutId);\n this.#scaleTimeoutId = null;\n }\n if (!noUpdate) {\n this.update();\n }\n }\n}\n\nexport { PagesCountLimit, PDFPageViewBuffer, PDFViewer };\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\n/** @typedef {import(\"./event_utils.js\").EventBus} EventBus */\n\nimport {\n CursorTool,\n ScrollMode,\n SpreadMode,\n toggleCheckedBtn,\n toggleExpandedBtn,\n} from \"./ui_utils.js\";\nimport { PagesCountLimit } from \"./pdf_viewer.js\";\n\n/**\n * @typedef {Object} SecondaryToolbarOptions\n * @property {HTMLDivElement} toolbar - Container for the secondary toolbar.\n * @property {HTMLButtonElement} toggleButton - Button to toggle the visibility\n * of the secondary toolbar.\n * @property {HTMLButtonElement} presentationModeButton - Button for entering\n * presentation mode.\n * @property {HTMLButtonElement} openFileButton - Button to open a file.\n * @property {HTMLButtonElement} printButton - Button to print the document.\n * @property {HTMLButtonElement} downloadButton - Button to download the\n * document.\n * @property {HTMLAnchorElement} viewBookmarkButton - Button to obtain a\n * bookmark link to the current location in the document.\n * @property {HTMLButtonElement} firstPageButton - Button to go to the first\n * page in the document.\n * @property {HTMLButtonElement} lastPageButton - Button to go to the last page\n * in the document.\n * @property {HTMLButtonElement} pageRotateCwButton - Button to rotate the pages\n * clockwise.\n * @property {HTMLButtonElement} pageRotateCcwButton - Button to rotate the\n * pages counterclockwise.\n * @property {HTMLButtonElement} cursorSelectToolButton - Button to enable the\n * select tool.\n * @property {HTMLButtonElement} cursorHandToolButton - Button to enable the\n * hand tool.\n * @property {HTMLButtonElement} documentPropertiesButton - Button for opening\n * the document properties dialog.\n */\n\nclass SecondaryToolbar {\n #opts;\n\n /**\n * @param {SecondaryToolbarOptions} options\n * @param {EventBus} eventBus\n */\n constructor(options, eventBus) {\n this.#opts = options;\n const buttons = [\n {\n element: options.presentationModeButton,\n eventName: \"presentationmode\",\n close: true,\n },\n { element: options.printButton, eventName: \"print\", close: true },\n { element: options.downloadButton, eventName: \"download\", close: true },\n { element: options.viewBookmarkButton, eventName: null, close: true },\n { element: options.firstPageButton, eventName: \"firstpage\", close: true },\n { element: options.lastPageButton, eventName: \"lastpage\", close: true },\n {\n element: options.pageRotateCwButton,\n eventName: \"rotatecw\",\n close: false,\n },\n {\n element: options.pageRotateCcwButton,\n eventName: \"rotateccw\",\n close: false,\n },\n {\n element: options.cursorSelectToolButton,\n eventName: \"switchcursortool\",\n eventDetails: { tool: CursorTool.SELECT },\n close: true,\n },\n {\n element: options.cursorHandToolButton,\n eventName: \"switchcursortool\",\n eventDetails: { tool: CursorTool.HAND },\n close: true,\n },\n {\n element: options.scrollPageButton,\n eventName: \"switchscrollmode\",\n eventDetails: { mode: ScrollMode.PAGE },\n close: true,\n },\n {\n element: options.scrollVerticalButton,\n eventName: \"switchscrollmode\",\n eventDetails: { mode: ScrollMode.VERTICAL },\n close: true,\n },\n {\n element: options.scrollHorizontalButton,\n eventName: \"switchscrollmode\",\n eventDetails: { mode: ScrollMode.HORIZONTAL },\n close: true,\n },\n {\n element: options.scrollWrappedButton,\n eventName: \"switchscrollmode\",\n eventDetails: { mode: ScrollMode.WRAPPED },\n close: true,\n },\n {\n element: options.spreadNoneButton,\n eventName: \"switchspreadmode\",\n eventDetails: { mode: SpreadMode.NONE },\n close: true,\n },\n {\n element: options.spreadOddButton,\n eventName: \"switchspreadmode\",\n eventDetails: { mode: SpreadMode.ODD },\n close: true,\n },\n {\n element: options.spreadEvenButton,\n eventName: \"switchspreadmode\",\n eventDetails: { mode: SpreadMode.EVEN },\n close: true,\n },\n {\n element: options.documentPropertiesButton,\n eventName: \"documentproperties\",\n close: true,\n },\n ];\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n buttons.push({\n element: options.openFileButton,\n eventName: \"openfile\",\n close: true,\n });\n }\n\n this.eventBus = eventBus;\n this.opened = false;\n\n // Bind the event listeners for click, cursor tool, and scroll/spread mode\n // actions.\n this.#bindListeners(buttons);\n\n this.reset();\n }\n\n /**\n * @type {boolean}\n */\n get isOpen() {\n return this.opened;\n }\n\n setPageNumber(pageNumber) {\n this.pageNumber = pageNumber;\n this.#updateUIState();\n }\n\n setPagesCount(pagesCount) {\n this.pagesCount = pagesCount;\n this.#updateUIState();\n }\n\n reset() {\n this.pageNumber = 0;\n this.pagesCount = 0;\n this.#updateUIState();\n\n // Reset the Scroll/Spread buttons too, since they're document specific.\n this.eventBus.dispatch(\"switchcursortool\", { source: this, reset: true });\n this.#scrollModeChanged({ mode: ScrollMode.VERTICAL });\n this.#spreadModeChanged({ mode: SpreadMode.NONE });\n }\n\n #updateUIState() {\n const {\n firstPageButton,\n lastPageButton,\n pageRotateCwButton,\n pageRotateCcwButton,\n } = this.#opts;\n\n firstPageButton.disabled = this.pageNumber <= 1;\n lastPageButton.disabled = this.pageNumber >= this.pagesCount;\n pageRotateCwButton.disabled = this.pagesCount === 0;\n pageRotateCcwButton.disabled = this.pagesCount === 0;\n }\n\n #bindListeners(buttons) {\n const { eventBus } = this;\n const { toggleButton } = this.#opts;\n // Button to toggle the visibility of the secondary toolbar.\n toggleButton.addEventListener(\"click\", this.toggle.bind(this));\n\n // All items within the secondary toolbar.\n for (const { element, eventName, close, eventDetails } of buttons) {\n element.addEventListener(\"click\", evt => {\n if (eventName !== null) {\n eventBus.dispatch(eventName, { source: this, ...eventDetails });\n }\n if (close) {\n this.close();\n }\n eventBus.dispatch(\"reporttelemetry\", {\n source: this,\n details: {\n type: \"buttons\",\n data: { id: element.id },\n },\n });\n });\n }\n\n eventBus._on(\"cursortoolchanged\", this.#cursorToolChanged.bind(this));\n eventBus._on(\"scrollmodechanged\", this.#scrollModeChanged.bind(this));\n eventBus._on(\"spreadmodechanged\", this.#spreadModeChanged.bind(this));\n }\n\n #cursorToolChanged({ tool }) {\n const { cursorSelectToolButton, cursorHandToolButton } = this.#opts;\n\n toggleCheckedBtn(cursorSelectToolButton, tool === CursorTool.SELECT);\n toggleCheckedBtn(cursorHandToolButton, tool === CursorTool.HAND);\n }\n\n #scrollModeChanged({ mode }) {\n const {\n scrollPageButton,\n scrollVerticalButton,\n scrollHorizontalButton,\n scrollWrappedButton,\n spreadNoneButton,\n spreadOddButton,\n spreadEvenButton,\n } = this.#opts;\n\n toggleCheckedBtn(scrollPageButton, mode === ScrollMode.PAGE);\n toggleCheckedBtn(scrollVerticalButton, mode === ScrollMode.VERTICAL);\n toggleCheckedBtn(scrollHorizontalButton, mode === ScrollMode.HORIZONTAL);\n toggleCheckedBtn(scrollWrappedButton, mode === ScrollMode.WRAPPED);\n\n // Permanently *disable* the Scroll buttons when PAGE-scrolling is being\n // enforced for *very* long/large documents; please see the `BaseViewer`.\n const forceScrollModePage =\n this.pagesCount > PagesCountLimit.FORCE_SCROLL_MODE_PAGE;\n scrollPageButton.disabled = forceScrollModePage;\n scrollVerticalButton.disabled = forceScrollModePage;\n scrollHorizontalButton.disabled = forceScrollModePage;\n scrollWrappedButton.disabled = forceScrollModePage;\n\n // Temporarily *disable* the Spread buttons when horizontal scrolling is\n // enabled, since the non-default Spread modes doesn't affect the layout.\n const isHorizontal = mode === ScrollMode.HORIZONTAL;\n spreadNoneButton.disabled = isHorizontal;\n spreadOddButton.disabled = isHorizontal;\n spreadEvenButton.disabled = isHorizontal;\n }\n\n #spreadModeChanged({ mode }) {\n const { spreadNoneButton, spreadOddButton, spreadEvenButton } = this.#opts;\n\n toggleCheckedBtn(spreadNoneButton, mode === SpreadMode.NONE);\n toggleCheckedBtn(spreadOddButton, mode === SpreadMode.ODD);\n toggleCheckedBtn(spreadEvenButton, mode === SpreadMode.EVEN);\n }\n\n open() {\n if (this.opened) {\n return;\n }\n this.opened = true;\n\n const { toggleButton, toolbar } = this.#opts;\n toggleExpandedBtn(toggleButton, true, toolbar);\n }\n\n close() {\n if (!this.opened) {\n return;\n }\n this.opened = false;\n\n const { toggleButton, toolbar } = this.#opts;\n toggleExpandedBtn(toggleButton, false, toolbar);\n }\n\n toggle() {\n if (this.opened) {\n this.close();\n } else {\n this.open();\n }\n }\n}\n\nexport { SecondaryToolbar };\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\n/** @typedef {import(\"./event_utils.js\").EventBus} EventBus */\n\nimport { AnnotationEditorType, ColorPicker, noContextMenu } from \"pdfjs-lib\";\nimport {\n DEFAULT_SCALE,\n DEFAULT_SCALE_VALUE,\n MAX_SCALE,\n MIN_SCALE,\n toggleCheckedBtn,\n} from \"./ui_utils.js\";\n\n/**\n * @typedef {Object} ToolbarOptions\n * @property {HTMLDivElement} container - Container for the secondary toolbar.\n * @property {HTMLSpanElement} numPages - Label that contains number of pages.\n * @property {HTMLInputElement} pageNumber - Control for display and user input\n * of the current page number.\n * @property {HTMLSelectElement} scaleSelect - Scale selection control.\n * Its width is adjusted, when necessary, on UI localization.\n * @property {HTMLOptionElement} customScaleOption - The item used to display\n * a non-predefined scale.\n * @property {HTMLButtonElement} previous - Button to go to the previous page.\n * @property {HTMLButtonElement} next - Button to go to the next page.\n * @property {HTMLButtonElement} zoomIn - Button to zoom in the pages.\n * @property {HTMLButtonElement} zoomOut - Button to zoom out the pages.\n * @property {HTMLButtonElement} viewFind - Button to open find bar.\n * @property {HTMLButtonElement} editorFreeTextButton - Button to switch to\n * FreeText editing.\n * @property {HTMLButtonElement} download - Button to download the document.\n */\n\nclass Toolbar {\n #opts;\n\n /**\n * @param {ToolbarOptions} options\n * @param {EventBus} eventBus\n */\n constructor(options, eventBus) {\n this.#opts = options;\n this.eventBus = eventBus;\n const buttons = [\n { element: options.previous, eventName: \"previouspage\" },\n { element: options.next, eventName: \"nextpage\" },\n { element: options.zoomIn, eventName: \"zoomin\" },\n { element: options.zoomOut, eventName: \"zoomout\" },\n { element: options.print, eventName: \"print\" },\n { element: options.download, eventName: \"download\" },\n {\n element: options.editorFreeTextButton,\n eventName: \"switchannotationeditormode\",\n eventDetails: {\n get mode() {\n const { classList } = options.editorFreeTextButton;\n return classList.contains(\"toggled\")\n ? AnnotationEditorType.NONE\n : AnnotationEditorType.FREETEXT;\n },\n },\n },\n {\n element: options.editorHighlightButton,\n eventName: \"switchannotationeditormode\",\n eventDetails: {\n get mode() {\n const { classList } = options.editorHighlightButton;\n return classList.contains(\"toggled\")\n ? AnnotationEditorType.NONE\n : AnnotationEditorType.HIGHLIGHT;\n },\n },\n },\n {\n element: options.editorInkButton,\n eventName: \"switchannotationeditormode\",\n eventDetails: {\n get mode() {\n const { classList } = options.editorInkButton;\n return classList.contains(\"toggled\")\n ? AnnotationEditorType.NONE\n : AnnotationEditorType.INK;\n },\n },\n },\n {\n element: options.editorStampButton,\n eventName: \"switchannotationeditormode\",\n eventDetails: {\n get mode() {\n const { classList } = options.editorStampButton;\n return classList.contains(\"toggled\")\n ? AnnotationEditorType.NONE\n : AnnotationEditorType.STAMP;\n },\n },\n },\n ];\n\n // Bind the event listeners for click and various other actions.\n this.#bindListeners(buttons);\n\n if (options.editorHighlightColorPicker) {\n eventBus._on(\n \"annotationeditoruimanager\",\n ({ uiManager }) => {\n this.#setAnnotationEditorUIManager(\n uiManager,\n options.editorHighlightColorPicker\n );\n },\n // Once the color picker has been added, we don't want to add it again.\n { once: true }\n );\n }\n\n eventBus._on(\"showannotationeditorui\", ({ mode }) => {\n switch (mode) {\n case AnnotationEditorType.HIGHLIGHT:\n options.editorHighlightButton.click();\n break;\n }\n });\n\n this.reset();\n }\n\n #setAnnotationEditorUIManager(uiManager, parentContainer) {\n const colorPicker = new ColorPicker({ uiManager });\n uiManager.setMainHighlightColorPicker(colorPicker);\n parentContainer.append(colorPicker.renderMainDropdown());\n }\n\n setPageNumber(pageNumber, pageLabel) {\n this.pageNumber = pageNumber;\n this.pageLabel = pageLabel;\n this.#updateUIState(false);\n }\n\n setPagesCount(pagesCount, hasPageLabels) {\n this.pagesCount = pagesCount;\n this.hasPageLabels = hasPageLabels;\n this.#updateUIState(true);\n }\n\n setPageScale(pageScaleValue, pageScale) {\n this.pageScaleValue = (pageScaleValue || pageScale).toString();\n this.pageScale = pageScale;\n this.#updateUIState(false);\n }\n\n reset() {\n this.pageNumber = 0;\n this.pageLabel = null;\n this.hasPageLabels = false;\n this.pagesCount = 0;\n this.pageScaleValue = DEFAULT_SCALE_VALUE;\n this.pageScale = DEFAULT_SCALE;\n this.#updateUIState(true);\n this.updateLoadingIndicatorState();\n\n // Reset the Editor buttons too, since they're document specific.\n this.#editorModeChanged({ mode: AnnotationEditorType.DISABLE });\n }\n\n #bindListeners(buttons) {\n const { eventBus } = this;\n const { pageNumber, scaleSelect } = this.#opts;\n const self = this;\n\n // The buttons within the toolbar.\n for (const { element, eventName, eventDetails } of buttons) {\n element.addEventListener(\"click\", evt => {\n if (eventName !== null) {\n eventBus.dispatch(eventName, {\n source: this,\n ...eventDetails,\n // evt.detail is the number of clicks.\n isFromKeyboard: evt.detail === 0,\n });\n }\n });\n }\n // The non-button elements within the toolbar.\n pageNumber.addEventListener(\"click\", function () {\n this.select();\n });\n pageNumber.addEventListener(\"change\", function () {\n eventBus.dispatch(\"pagenumberchanged\", {\n source: self,\n value: this.value,\n });\n });\n\n scaleSelect.addEventListener(\"change\", function () {\n if (this.value === \"custom\") {\n return;\n }\n eventBus.dispatch(\"scalechanged\", {\n source: self,\n value: this.value,\n });\n });\n // Here we depend on browsers dispatching the \"click\" event *after* the\n // \"change\" event, when the <select>-element changes.\n scaleSelect.addEventListener(\"click\", function ({ target }) {\n // Remove focus when an <option>-element was *clicked*, to improve the UX\n // for mouse users (fixes bug 1300525 and issue 4923).\n if (\n this.value === self.pageScaleValue &&\n target.tagName.toUpperCase() === \"OPTION\"\n ) {\n this.blur();\n }\n });\n // Suppress context menus for some controls.\n scaleSelect.oncontextmenu = noContextMenu;\n\n eventBus._on(\n \"annotationeditormodechanged\",\n this.#editorModeChanged.bind(this)\n );\n }\n\n #editorModeChanged({ mode }) {\n const {\n editorFreeTextButton,\n editorFreeTextParamsToolbar,\n editorHighlightButton,\n editorHighlightParamsToolbar,\n editorInkButton,\n editorInkParamsToolbar,\n editorStampButton,\n editorStampParamsToolbar,\n } = this.#opts;\n\n toggleCheckedBtn(\n editorFreeTextButton,\n mode === AnnotationEditorType.FREETEXT,\n editorFreeTextParamsToolbar\n );\n toggleCheckedBtn(\n editorHighlightButton,\n mode === AnnotationEditorType.HIGHLIGHT,\n editorHighlightParamsToolbar\n );\n toggleCheckedBtn(\n editorInkButton,\n mode === AnnotationEditorType.INK,\n editorInkParamsToolbar\n );\n toggleCheckedBtn(\n editorStampButton,\n mode === AnnotationEditorType.STAMP,\n editorStampParamsToolbar\n );\n\n const isDisable = mode === AnnotationEditorType.DISABLE;\n editorFreeTextButton.disabled = isDisable;\n editorHighlightButton.disabled = isDisable;\n editorInkButton.disabled = isDisable;\n editorStampButton.disabled = isDisable;\n }\n\n #updateUIState(resetNumPages = false) {\n const { pageNumber, pagesCount, pageScaleValue, pageScale } = this;\n const opts = this.#opts;\n\n if (resetNumPages) {\n if (this.hasPageLabels) {\n opts.pageNumber.type = \"text\";\n\n opts.numPages.setAttribute(\"data-l10n-id\", \"pdfjs-page-of-pages\");\n } else {\n opts.pageNumber.type = \"number\";\n\n opts.numPages.setAttribute(\"data-l10n-id\", \"pdfjs-of-pages\");\n opts.numPages.setAttribute(\n \"data-l10n-args\",\n JSON.stringify({ pagesCount })\n );\n }\n opts.pageNumber.max = pagesCount;\n }\n\n if (this.hasPageLabels) {\n opts.pageNumber.value = this.pageLabel;\n\n opts.numPages.setAttribute(\n \"data-l10n-args\",\n JSON.stringify({ pageNumber, pagesCount })\n );\n } else {\n opts.pageNumber.value = pageNumber;\n }\n\n opts.previous.disabled = pageNumber <= 1;\n opts.next.disabled = pageNumber >= pagesCount;\n\n opts.zoomOut.disabled = pageScale <= MIN_SCALE;\n opts.zoomIn.disabled = pageScale >= MAX_SCALE;\n\n let predefinedValueFound = false;\n for (const option of opts.scaleSelect.options) {\n if (option.value !== pageScaleValue) {\n option.selected = false;\n continue;\n }\n option.selected = true;\n predefinedValueFound = true;\n }\n if (!predefinedValueFound) {\n opts.customScaleOption.selected = true;\n opts.customScaleOption.setAttribute(\n \"data-l10n-args\",\n JSON.stringify({\n scale: Math.round(pageScale * 10000) / 100,\n })\n );\n }\n }\n\n updateLoadingIndicatorState(loading = false) {\n const { pageNumber } = this.#opts;\n pageNumber.classList.toggle(\"loading\", loading);\n }\n}\n\nexport { Toolbar };\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 DEFAULT_VIEW_HISTORY_CACHE_SIZE = 20;\n\n/**\n * View History - This is a utility for saving various view parameters for\n * recently opened files.\n *\n * The way that the view parameters are stored depends on how PDF.js is built,\n * for 'gulp <flag>' the following cases exist:\n * - MOZCENTRAL - uses sessionStorage.\n * - GENERIC or CHROME - uses localStorage, if it is available.\n */\nclass ViewHistory {\n constructor(fingerprint, cacheSize = DEFAULT_VIEW_HISTORY_CACHE_SIZE) {\n this.fingerprint = fingerprint;\n this.cacheSize = cacheSize;\n\n this._initializedPromise = this._readFromStorage().then(databaseStr => {\n const database = JSON.parse(databaseStr || \"{}\");\n let index = -1;\n if (!Array.isArray(database.files)) {\n database.files = [];\n } else {\n while (database.files.length >= this.cacheSize) {\n database.files.shift();\n }\n\n for (let i = 0, ii = database.files.length; i < ii; i++) {\n const branch = database.files[i];\n if (branch.fingerprint === this.fingerprint) {\n index = i;\n break;\n }\n }\n }\n if (index === -1) {\n index = database.files.push({ fingerprint: this.fingerprint }) - 1;\n }\n this.file = database.files[index];\n this.database = database;\n });\n }\n\n async _writeToStorage() {\n const databaseStr = JSON.stringify(this.database);\n\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n sessionStorage.setItem(\"pdfjs.history\", databaseStr);\n return;\n }\n localStorage.setItem(\"pdfjs.history\", databaseStr);\n }\n\n async _readFromStorage() {\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n return sessionStorage.getItem(\"pdfjs.history\");\n }\n return localStorage.getItem(\"pdfjs.history\");\n }\n\n async set(name, val) {\n await this._initializedPromise;\n this.file[name] = val;\n return this._writeToStorage();\n }\n\n async setMultiple(properties) {\n await this._initializedPromise;\n for (const name in properties) {\n this.file[name] = properties[name];\n }\n return this._writeToStorage();\n }\n\n async get(name, defaultValue) {\n await this._initializedPromise;\n const val = this.file[name];\n return val !== undefined ? val : defaultValue;\n }\n\n async getMultiple(properties) {\n await this._initializedPromise;\n const values = Object.create(null);\n\n for (const name in properties) {\n const val = this.file[name];\n values[name] = val !== undefined ? val : properties[name];\n }\n return values;\n }\n}\n\nexport { ViewHistory };\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\n/** @typedef {import(\"./interfaces.js\").IL10n} IL10n */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"../src/display/api.js\").PDFDocumentProxy} PDFDocumentProxy */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"../src/display/api.js\").PDFDocumentLoadingTask} PDFDocumentLoadingTask */\n\nimport {\n animationStarted,\n apiPageLayoutToViewerModes,\n apiPageModeToSidebarView,\n AutoPrintRegExp,\n CursorTool,\n DEFAULT_SCALE_VALUE,\n getActiveOrFocusedElement,\n isValidRotation,\n isValidScrollMode,\n isValidSpreadMode,\n normalizeWheelEventDirection,\n parseQueryString,\n ProgressBar,\n RenderingStates,\n ScrollMode,\n SidebarView,\n SpreadMode,\n TextLayerMode,\n} from \"./ui_utils.js\";\nimport {\n AnnotationEditorType,\n build,\n FeatureTest,\n getDocument,\n getFilenameFromUrl,\n getPdfFilenameFromUrl,\n GlobalWorkerOptions,\n InvalidPDFException,\n isDataScheme,\n isPdfFile,\n MissingPDFException,\n PDFWorker,\n shadow,\n UnexpectedResponseException,\n version,\n} from \"pdfjs-lib\";\nimport { AppOptions, OptionKind } from \"./app_options.js\";\nimport { AutomationEventBus, EventBus } from \"./event_utils.js\";\nimport { ExternalServices, initCom, MLManager } from \"web-external_services\";\nimport { LinkTarget, PDFLinkService } from \"./pdf_link_service.js\";\nimport { AltTextManager } from \"web-alt_text_manager\";\nimport { AnnotationEditorParams } from \"web-annotation_editor_params\";\nimport { CaretBrowsingMode } from \"./caret_browsing.js\";\nimport { DownloadManager } from \"web-download_manager\";\nimport { OverlayManager } from \"./overlay_manager.js\";\nimport { PasswordPrompt } from \"./password_prompt.js\";\nimport { PDFAttachmentViewer } from \"web-pdf_attachment_viewer\";\nimport { PDFCursorTools } from \"web-pdf_cursor_tools\";\nimport { PDFDocumentProperties } from \"web-pdf_document_properties\";\nimport { PDFFindBar } from \"web-pdf_find_bar\";\nimport { PDFFindController } from \"./pdf_find_controller.js\";\nimport { PDFHistory } from \"./pdf_history.js\";\nimport { PDFLayerViewer } from \"web-pdf_layer_viewer\";\nimport { PDFOutlineViewer } from \"web-pdf_outline_viewer\";\nimport { PDFPresentationMode } from \"web-pdf_presentation_mode\";\nimport { PDFPrintServiceFactory } from \"web-print_service\";\nimport { PDFRenderingQueue } from \"./pdf_rendering_queue.js\";\nimport { PDFScriptingManager } from \"./pdf_scripting_manager.js\";\nimport { PDFSidebar } from \"web-pdf_sidebar\";\nimport { PDFThumbnailViewer } from \"web-pdf_thumbnail_viewer\";\nimport { PDFViewer } from \"./pdf_viewer.js\";\nimport { Preferences } from \"web-preferences\";\nimport { SecondaryToolbar } from \"web-secondary_toolbar\";\nimport { Toolbar } from \"web-toolbar\";\nimport { ViewHistory } from \"./view_history.js\";\n\nconst FORCE_PAGES_LOADED_TIMEOUT = 10000; // ms\nconst WHEEL_ZOOM_DISABLED_TIMEOUT = 1000; // ms\n\nconst ViewOnLoad = {\n UNKNOWN: -1,\n PREVIOUS: 0, // Default value.\n INITIAL: 1,\n};\n\nconst PDFViewerApplication = {\n initialBookmark: document.location.hash.substring(1),\n _initializedCapability: {\n ...Promise.withResolvers(),\n settled: false,\n },\n appConfig: null,\n /** @type {PDFDocumentProxy} */\n pdfDocument: null,\n /** @type {PDFDocumentLoadingTask} */\n pdfLoadingTask: null,\n printService: null,\n /** @type {PDFViewer} */\n pdfViewer: null,\n /** @type {PDFThumbnailViewer} */\n pdfThumbnailViewer: null,\n /** @type {PDFRenderingQueue} */\n pdfRenderingQueue: null,\n /** @type {PDFPresentationMode} */\n pdfPresentationMode: null,\n /** @type {PDFDocumentProperties} */\n pdfDocumentProperties: null,\n /** @type {PDFLinkService} */\n pdfLinkService: null,\n /** @type {PDFHistory} */\n pdfHistory: null,\n /** @type {PDFSidebar} */\n pdfSidebar: null,\n /** @type {PDFOutlineViewer} */\n pdfOutlineViewer: null,\n /** @type {PDFAttachmentViewer} */\n pdfAttachmentViewer: null,\n /** @type {PDFLayerViewer} */\n pdfLayerViewer: null,\n /** @type {PDFCursorTools} */\n pdfCursorTools: null,\n /** @type {PDFScriptingManager} */\n pdfScriptingManager: null,\n /** @type {ViewHistory} */\n store: null,\n /** @type {DownloadManager} */\n downloadManager: null,\n /** @type {OverlayManager} */\n overlayManager: null,\n /** @type {Preferences} */\n preferences: null,\n /** @type {Toolbar} */\n toolbar: null,\n /** @type {SecondaryToolbar} */\n secondaryToolbar: null,\n /** @type {EventBus} */\n eventBus: null,\n /** @type {IL10n} */\n l10n: null,\n /** @type {AnnotationEditorParams} */\n annotationEditorParams: null,\n isInitialViewSet: false,\n downloadComplete: false,\n isViewerEmbedded: window.parent !== window,\n url: \"\",\n baseUrl: \"\",\n _downloadUrl: \"\",\n _eventBusAbortController: null,\n _windowAbortController: null,\n documentInfo: null,\n metadata: null,\n _contentDispositionFilename: null,\n _contentLength: null,\n _saveInProgress: false,\n _wheelUnusedTicks: 0,\n _wheelUnusedFactor: 1,\n _touchUnusedTicks: 0,\n _touchUnusedFactor: 1,\n _PDFBug: null,\n _hasAnnotationEditors: false,\n _title: document.title,\n _printAnnotationStoragePromise: null,\n _touchInfo: null,\n _isCtrlKeyDown: false,\n _nimbusDataPromise: null,\n _caretBrowsing: null,\n _isScrolling: false,\n\n // Called once when the document is loaded.\n async initialize(appConfig) {\n let l10nPromise;\n // In the (various) extension builds, where the locale is set automatically,\n // initialize the `L10n`-instance as soon as possible.\n if (typeof PDFJSDev !== \"undefined\" && !PDFJSDev.test(\"GENERIC\")) {\n l10nPromise = this.externalServices.createL10n();\n }\n this.appConfig = appConfig;\n\n if (\n typeof PDFJSDev === \"undefined\"\n ? window.isGECKOVIEW\n : PDFJSDev.test(\"GECKOVIEW\")\n ) {\n this._nimbusDataPromise = this.externalServices.getNimbusExperimentData();\n }\n\n // Ensure that `Preferences`, and indirectly `AppOptions`, have initialized\n // before creating e.g. the various viewer components.\n try {\n await this.preferences.initializedPromise;\n } catch (ex) {\n console.error(`initialize: \"${ex.message}\".`);\n }\n if (AppOptions.get(\"pdfBugEnabled\")) {\n await this._parseHashParams();\n }\n\n if (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"MOZCENTRAL\")) {\n let mode;\n switch (AppOptions.get(\"viewerCssTheme\")) {\n case 1:\n mode = \"is-light\";\n break;\n case 2:\n mode = \"is-dark\";\n break;\n }\n if (mode) {\n document.documentElement.classList.add(mode);\n }\n }\n\n // Ensure that the `L10n`-instance has been initialized before creating\n // e.g. the various viewer components.\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n l10nPromise = this.externalServices.createL10n();\n }\n this.l10n = await l10nPromise;\n document.getElementsByTagName(\"html\")[0].dir = this.l10n.getDirection();\n // Connect Fluent, when necessary, and translate what we already have.\n if (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"MOZCENTRAL\")) {\n this.l10n.translate(appConfig.appContainer || document.documentElement);\n }\n\n if (\n this.isViewerEmbedded &&\n AppOptions.get(\"externalLinkTarget\") === LinkTarget.NONE\n ) {\n // Prevent external links from \"replacing\" the viewer,\n // when it's embedded in e.g. an <iframe> or an <object>.\n AppOptions.set(\"externalLinkTarget\", LinkTarget.TOP);\n }\n await this._initializeViewerComponents();\n\n // Bind the various event handlers *after* the viewer has been\n // initialized, to prevent errors if an event arrives too soon.\n this.bindEvents();\n this.bindWindowEvents();\n\n this._initializedCapability.settled = true;\n this._initializedCapability.resolve();\n },\n\n /**\n * Potentially parse special debugging flags in the hash section of the URL.\n * @private\n */\n async _parseHashParams() {\n const hash = document.location.hash.substring(1);\n if (!hash) {\n return;\n }\n const { mainContainer, viewerContainer } = this.appConfig,\n params = parseQueryString(hash);\n\n const loadPDFBug = async () => {\n if (this._PDFBug) {\n return;\n }\n const { PDFBug } =\n typeof PDFJSDev === \"undefined\"\n ? await import(AppOptions.get(\"debuggerSrc\")) // eslint-disable-line no-unsanitized/method\n : await __non_webpack_import__(AppOptions.get(\"debuggerSrc\"));\n\n this._PDFBug = PDFBug;\n };\n\n if (params.get(\"disableworker\") === \"true\") {\n try {\n GlobalWorkerOptions.workerSrc ||= AppOptions.get(\"workerSrc\");\n\n if (typeof PDFJSDev === \"undefined\") {\n globalThis.pdfjsWorker = await import(\"pdfjs/pdf.worker.js\");\n } else {\n await __non_webpack_import__(PDFWorker.workerSrc);\n }\n } catch (ex) {\n console.error(`_parseHashParams: \"${ex.message}\".`);\n }\n }\n if (params.has(\"disablerange\")) {\n AppOptions.set(\"disableRange\", params.get(\"disablerange\") === \"true\");\n }\n if (params.has(\"disablestream\")) {\n AppOptions.set(\"disableStream\", params.get(\"disablestream\") === \"true\");\n }\n if (params.has(\"disableautofetch\")) {\n AppOptions.set(\n \"disableAutoFetch\",\n params.get(\"disableautofetch\") === \"true\"\n );\n }\n if (params.has(\"disablefontface\")) {\n AppOptions.set(\n \"disableFontFace\",\n params.get(\"disablefontface\") === \"true\"\n );\n }\n if (params.has(\"disablehistory\")) {\n AppOptions.set(\"disableHistory\", params.get(\"disablehistory\") === \"true\");\n }\n if (params.has(\"verbosity\")) {\n AppOptions.set(\"verbosity\", params.get(\"verbosity\") | 0);\n }\n if (params.has(\"textlayer\")) {\n switch (params.get(\"textlayer\")) {\n case \"off\":\n AppOptions.set(\"textLayerMode\", TextLayerMode.DISABLE);\n break;\n case \"visible\":\n case \"shadow\":\n case \"hover\":\n viewerContainer.classList.add(`textLayer-${params.get(\"textlayer\")}`);\n try {\n await loadPDFBug();\n this._PDFBug.loadCSS();\n } catch (ex) {\n console.error(`_parseHashParams: \"${ex.message}\".`);\n }\n break;\n }\n }\n if (params.has(\"pdfbug\")) {\n AppOptions.setAll({ pdfBug: true, fontExtraProperties: true });\n\n const enabled = params.get(\"pdfbug\").split(\",\");\n try {\n await loadPDFBug();\n this._PDFBug.init(mainContainer, enabled);\n } catch (ex) {\n console.error(`_parseHashParams: \"${ex.message}\".`);\n }\n }\n // It is not possible to change locale for the (various) extension builds.\n if (\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) &&\n params.has(\"locale\")\n ) {\n AppOptions.set(\"locale\", params.get(\"locale\"));\n }\n\n // Set some specific preferences for tests.\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"TESTING\")) {\n if (params.has(\"highlighteditorcolors\")) {\n AppOptions.set(\n \"highlightEditorColors\",\n params.get(\"highlighteditorcolors\")\n );\n }\n if (params.has(\"maxcanvaspixels\")) {\n AppOptions.set(\n \"maxCanvasPixels\",\n Number(params.get(\"maxcanvaspixels\"))\n );\n }\n if (params.has(\"supportscaretbrowsingmode\")) {\n AppOptions.set(\n \"supportsCaretBrowsingMode\",\n params.get(\"supportscaretbrowsingmode\") === \"true\"\n );\n }\n }\n },\n\n /**\n * @private\n */\n async _initializeViewerComponents() {\n const { appConfig, externalServices, l10n } = this;\n\n const eventBus = AppOptions.get(\"isInAutomation\")\n ? new AutomationEventBus()\n : new EventBus();\n this.eventBus = eventBus;\n\n this.overlayManager = new OverlayManager();\n\n const pdfRenderingQueue = new PDFRenderingQueue();\n pdfRenderingQueue.onIdle = this._cleanup.bind(this);\n this.pdfRenderingQueue = pdfRenderingQueue;\n\n const pdfLinkService = new PDFLinkService({\n eventBus,\n externalLinkTarget: AppOptions.get(\"externalLinkTarget\"),\n externalLinkRel: AppOptions.get(\"externalLinkRel\"),\n ignoreDestinationZoom: AppOptions.get(\"ignoreDestinationZoom\"),\n });\n this.pdfLinkService = pdfLinkService;\n\n const downloadManager = (this.downloadManager = new DownloadManager());\n\n const findController = new PDFFindController({\n linkService: pdfLinkService,\n eventBus,\n updateMatchesCountOnProgress:\n typeof PDFJSDev === \"undefined\"\n ? !window.isGECKOVIEW\n : !PDFJSDev.test(\"GECKOVIEW\"),\n });\n this.findController = findController;\n\n const pdfScriptingManager = new PDFScriptingManager({\n eventBus,\n externalServices,\n docProperties: this._scriptingDocProperties.bind(this),\n });\n this.pdfScriptingManager = pdfScriptingManager;\n\n const container = appConfig.mainContainer,\n viewer = appConfig.viewerContainer;\n const annotationEditorMode = AppOptions.get(\"annotationEditorMode\");\n const pageColors =\n AppOptions.get(\"forcePageColors\") ||\n window.matchMedia(\"(forced-colors: active)\").matches\n ? {\n background: AppOptions.get(\"pageColorsBackground\"),\n foreground: AppOptions.get(\"pageColorsForeground\"),\n }\n : null;\n const altTextManager = appConfig.altTextDialog\n ? new AltTextManager(\n appConfig.altTextDialog,\n container,\n this.overlayManager,\n eventBus\n )\n : null;\n\n const pdfViewer = new PDFViewer({\n container,\n viewer,\n eventBus,\n renderingQueue: pdfRenderingQueue,\n linkService: pdfLinkService,\n downloadManager,\n altTextManager,\n findController,\n scriptingManager:\n AppOptions.get(\"enableScripting\") && pdfScriptingManager,\n l10n,\n textLayerMode: AppOptions.get(\"textLayerMode\"),\n annotationMode: AppOptions.get(\"annotationMode\"),\n annotationEditorMode,\n annotationEditorHighlightColors: AppOptions.get(\"highlightEditorColors\"),\n enableHighlightFloatingButton: AppOptions.get(\n \"enableHighlightFloatingButton\"\n ),\n imageResourcesPath: AppOptions.get(\"imageResourcesPath\"),\n enablePrintAutoRotate: AppOptions.get(\"enablePrintAutoRotate\"),\n maxCanvasPixels: AppOptions.get(\"maxCanvasPixels\"),\n enablePermissions: AppOptions.get(\"enablePermissions\"),\n pageColors,\n mlManager: this.mlManager,\n });\n this.pdfViewer = pdfViewer;\n\n pdfRenderingQueue.setViewer(pdfViewer);\n pdfLinkService.setViewer(pdfViewer);\n pdfScriptingManager.setViewer(pdfViewer);\n\n if (appConfig.sidebar?.thumbnailView) {\n this.pdfThumbnailViewer = new PDFThumbnailViewer({\n container: appConfig.sidebar.thumbnailView,\n eventBus,\n renderingQueue: pdfRenderingQueue,\n linkService: pdfLinkService,\n pageColors,\n });\n pdfRenderingQueue.setThumbnailViewer(this.pdfThumbnailViewer);\n }\n\n // The browsing history is only enabled when the viewer is standalone,\n // i.e. not when it is embedded in a web page.\n if (!this.isViewerEmbedded && !AppOptions.get(\"disableHistory\")) {\n this.pdfHistory = new PDFHistory({\n linkService: pdfLinkService,\n eventBus,\n });\n pdfLinkService.setHistory(this.pdfHistory);\n }\n\n if (!this.supportsIntegratedFind && appConfig.findBar) {\n this.findBar = new PDFFindBar(appConfig.findBar, eventBus);\n }\n\n if (appConfig.annotationEditorParams) {\n if (annotationEditorMode !== AnnotationEditorType.DISABLE) {\n if (AppOptions.get(\"enableStampEditor\")) {\n appConfig.toolbar?.editorStampButton?.classList.remove(\"hidden\");\n }\n\n const editorHighlightButton = appConfig.toolbar?.editorHighlightButton;\n if (editorHighlightButton && AppOptions.get(\"enableHighlightEditor\")) {\n editorHighlightButton.hidden = false;\n }\n\n this.annotationEditorParams = new AnnotationEditorParams(\n appConfig.annotationEditorParams,\n eventBus\n );\n } else {\n for (const id of [\"editorModeButtons\", \"editorModeSeparator\"]) {\n document.getElementById(id)?.classList.add(\"hidden\");\n }\n }\n }\n\n if (appConfig.documentProperties) {\n this.pdfDocumentProperties = new PDFDocumentProperties(\n appConfig.documentProperties,\n this.overlayManager,\n eventBus,\n l10n,\n /* fileNameLookup = */ () => this._docFilename\n );\n }\n\n // NOTE: The cursor-tools are unlikely to be helpful/useful in GeckoView,\n // in particular the `HandTool` which basically simulates touch scrolling.\n if (appConfig.secondaryToolbar?.cursorHandToolButton) {\n this.pdfCursorTools = new PDFCursorTools({\n container,\n eventBus,\n cursorToolOnLoad: AppOptions.get(\"cursorToolOnLoad\"),\n });\n }\n\n if (appConfig.toolbar) {\n if (\n typeof PDFJSDev === \"undefined\"\n ? window.isGECKOVIEW\n : PDFJSDev.test(\"GECKOVIEW\")\n ) {\n this.toolbar = new Toolbar(\n appConfig.toolbar,\n eventBus,\n await this._nimbusDataPromise\n );\n } else {\n this.toolbar = new Toolbar(appConfig.toolbar, eventBus);\n }\n }\n\n if (appConfig.secondaryToolbar) {\n this.secondaryToolbar = new SecondaryToolbar(\n appConfig.secondaryToolbar,\n eventBus\n );\n }\n\n if (\n this.supportsFullscreen &&\n appConfig.secondaryToolbar?.presentationModeButton\n ) {\n this.pdfPresentationMode = new PDFPresentationMode({\n container,\n pdfViewer,\n eventBus,\n });\n }\n\n if (appConfig.passwordOverlay) {\n this.passwordPrompt = new PasswordPrompt(\n appConfig.passwordOverlay,\n this.overlayManager,\n this.isViewerEmbedded\n );\n }\n\n if (appConfig.sidebar?.outlineView) {\n this.pdfOutlineViewer = new PDFOutlineViewer({\n container: appConfig.sidebar.outlineView,\n eventBus,\n l10n,\n linkService: pdfLinkService,\n downloadManager,\n });\n }\n\n if (appConfig.sidebar?.attachmentsView) {\n this.pdfAttachmentViewer = new PDFAttachmentViewer({\n container: appConfig.sidebar.attachmentsView,\n eventBus,\n l10n,\n downloadManager,\n });\n }\n\n if (appConfig.sidebar?.layersView) {\n this.pdfLayerViewer = new PDFLayerViewer({\n container: appConfig.sidebar.layersView,\n eventBus,\n l10n,\n });\n }\n\n if (appConfig.sidebar) {\n this.pdfSidebar = new PDFSidebar({\n elements: appConfig.sidebar,\n eventBus,\n l10n,\n });\n this.pdfSidebar.onToggled = this.forceRendering.bind(this);\n this.pdfSidebar.onUpdateThumbnails = () => {\n // Use the rendered pages to set the corresponding thumbnail images.\n for (const pageView of pdfViewer.getCachedPageViews()) {\n if (pageView.renderingState === RenderingStates.FINISHED) {\n this.pdfThumbnailViewer\n .getThumbnail(pageView.id - 1)\n ?.setImage(pageView);\n }\n }\n this.pdfThumbnailViewer.scrollThumbnailIntoView(\n pdfViewer.currentPageNumber\n );\n };\n }\n },\n\n async run(config) {\n this.preferences = new Preferences();\n await this.initialize(config);\n\n const { appConfig, eventBus } = this;\n let file;\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n const queryString = document.location.search.substring(1);\n const params = parseQueryString(queryString);\n file = params.get(\"file\") ?? AppOptions.get(\"defaultUrl\");\n validateFileURL(file);\n } else if (PDFJSDev.test(\"MOZCENTRAL\")) {\n file = window.location.href;\n } else if (PDFJSDev.test(\"CHROME\")) {\n file = AppOptions.get(\"defaultUrl\");\n }\n\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n const fileInput = (this._openFileInput = document.createElement(\"input\"));\n fileInput.id = \"fileInput\";\n fileInput.hidden = true;\n fileInput.type = \"file\";\n fileInput.value = null;\n document.body.append(fileInput);\n\n fileInput.addEventListener(\"change\", function (evt) {\n const { files } = evt.target;\n if (!files || files.length === 0) {\n return;\n }\n eventBus.dispatch(\"fileinputchange\", {\n source: this,\n fileInput: evt.target,\n });\n });\n\n // Enable dragging-and-dropping a new PDF file onto the viewerContainer.\n appConfig.mainContainer.addEventListener(\"dragover\", function (evt) {\n evt.preventDefault();\n\n evt.dataTransfer.dropEffect =\n evt.dataTransfer.effectAllowed === \"copy\" ? \"copy\" : \"move\";\n });\n appConfig.mainContainer.addEventListener(\"drop\", function (evt) {\n evt.preventDefault();\n\n const { files } = evt.dataTransfer;\n if (!files || files.length === 0) {\n return;\n }\n eventBus.dispatch(\"fileinputchange\", {\n source: this,\n fileInput: evt.dataTransfer,\n });\n });\n }\n\n if (!AppOptions.get(\"supportsDocumentFonts\")) {\n AppOptions.set(\"disableFontFace\", true);\n this.l10n.get(\"pdfjs-web-fonts-disabled\").then(msg => {\n console.warn(msg);\n });\n }\n\n if (!this.supportsPrinting) {\n appConfig.toolbar?.print?.classList.add(\"hidden\");\n appConfig.secondaryToolbar?.printButton.classList.add(\"hidden\");\n }\n\n if (!this.supportsFullscreen) {\n appConfig.secondaryToolbar?.presentationModeButton.classList.add(\n \"hidden\"\n );\n }\n\n if (this.supportsIntegratedFind) {\n appConfig.toolbar?.viewFind?.classList.add(\"hidden\");\n }\n\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n if (file) {\n this.open({ url: file });\n } else {\n this._hideViewBookmark();\n }\n } else if (PDFJSDev.test(\"MOZCENTRAL || CHROME\")) {\n this.setTitleUsingUrl(file, /* downloadUrl = */ file);\n\n this.externalServices.initPassiveLoading();\n } else {\n throw new Error(\"Not implemented: run\");\n }\n },\n\n get externalServices() {\n return shadow(this, \"externalServices\", new ExternalServices());\n },\n\n get mlManager() {\n return shadow(\n this,\n \"mlManager\",\n AppOptions.get(\"enableML\") === true ? new MLManager() : null\n );\n },\n\n get initialized() {\n return this._initializedCapability.settled;\n },\n\n get initializedPromise() {\n return this._initializedCapability.promise;\n },\n\n zoomIn(steps, scaleFactor) {\n if (this.pdfViewer.isInPresentationMode) {\n return;\n }\n this.pdfViewer.increaseScale({\n drawingDelay: AppOptions.get(\"defaultZoomDelay\"),\n steps,\n scaleFactor,\n });\n },\n\n zoomOut(steps, scaleFactor) {\n if (this.pdfViewer.isInPresentationMode) {\n return;\n }\n this.pdfViewer.decreaseScale({\n drawingDelay: AppOptions.get(\"defaultZoomDelay\"),\n steps,\n scaleFactor,\n });\n },\n\n zoomReset() {\n if (this.pdfViewer.isInPresentationMode) {\n return;\n }\n this.pdfViewer.currentScaleValue = DEFAULT_SCALE_VALUE;\n },\n\n get pagesCount() {\n return this.pdfDocument ? this.pdfDocument.numPages : 0;\n },\n\n get page() {\n return this.pdfViewer.currentPageNumber;\n },\n\n set page(val) {\n this.pdfViewer.currentPageNumber = val;\n },\n\n get supportsPrinting() {\n return PDFPrintServiceFactory.supportsPrinting;\n },\n\n get supportsFullscreen() {\n return shadow(this, \"supportsFullscreen\", document.fullscreenEnabled);\n },\n\n get supportsPinchToZoom() {\n return shadow(\n this,\n \"supportsPinchToZoom\",\n AppOptions.get(\"supportsPinchToZoom\")\n );\n },\n\n get supportsIntegratedFind() {\n return shadow(\n this,\n \"supportsIntegratedFind\",\n AppOptions.get(\"supportsIntegratedFind\")\n );\n },\n\n get loadingBar() {\n const barElement = document.getElementById(\"loadingBar\");\n const bar = barElement ? new ProgressBar(barElement) : null;\n return shadow(this, \"loadingBar\", bar);\n },\n\n get supportsMouseWheelZoomCtrlKey() {\n return shadow(\n this,\n \"supportsMouseWheelZoomCtrlKey\",\n AppOptions.get(\"supportsMouseWheelZoomCtrlKey\")\n );\n },\n\n get supportsMouseWheelZoomMetaKey() {\n return shadow(\n this,\n \"supportsMouseWheelZoomMetaKey\",\n AppOptions.get(\"supportsMouseWheelZoomMetaKey\")\n );\n },\n\n get supportsCaretBrowsingMode() {\n return AppOptions.get(\"supportsCaretBrowsingMode\");\n },\n\n moveCaret(isUp, select) {\n this._caretBrowsing ||= new CaretBrowsingMode(\n this.appConfig.mainContainer,\n this.appConfig.viewerContainer,\n this.appConfig.toolbar?.container\n );\n this._caretBrowsing.moveCaret(isUp, select);\n },\n\n setTitleUsingUrl(url = \"\", downloadUrl = null) {\n this.url = url;\n this.baseUrl = url.split(\"#\", 1)[0];\n if (downloadUrl) {\n this._downloadUrl =\n downloadUrl === url ? this.baseUrl : downloadUrl.split(\"#\", 1)[0];\n }\n if (isDataScheme(url)) {\n this._hideViewBookmark();\n }\n let title = getPdfFilenameFromUrl(url, \"\");\n if (!title) {\n try {\n title = decodeURIComponent(getFilenameFromUrl(url)) || url;\n } catch {\n // decodeURIComponent may throw URIError,\n // fall back to using the unprocessed url in that case\n title = url;\n }\n }\n this.setTitle(title);\n },\n\n setTitle(title = this._title) {\n this._title = title;\n\n if (this.isViewerEmbedded) {\n // Embedded PDF viewers should not be changing their parent page's title.\n return;\n }\n const editorIndicator =\n this._hasAnnotationEditors && !this.pdfRenderingQueue.printing;\n document.title = `${editorIndicator ? \"* \" : \"\"}${title}`;\n },\n\n get _docFilename() {\n // Use `this.url` instead of `this.baseUrl` to perform filename detection\n // based on the reference fragment as ultimate fallback if needed.\n return this._contentDispositionFilename || getPdfFilenameFromUrl(this.url);\n },\n\n /**\n * @private\n */\n _hideViewBookmark() {\n const { secondaryToolbar } = this.appConfig;\n // URL does not reflect proper document location - hiding some buttons.\n secondaryToolbar?.viewBookmarkButton.classList.add(\"hidden\");\n\n // Avoid displaying multiple consecutive separators in the secondaryToolbar.\n if (secondaryToolbar?.presentationModeButton.classList.contains(\"hidden\")) {\n document.getElementById(\"viewBookmarkSeparator\")?.classList.add(\"hidden\");\n }\n },\n\n /**\n * Closes opened PDF document.\n * @returns {Promise} - Returns the promise, which is resolved when all\n * destruction is completed.\n */\n async close() {\n this._unblockDocumentLoadEvent();\n this._hideViewBookmark();\n\n if (!this.pdfLoadingTask) {\n return;\n }\n if (\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) &&\n this.pdfDocument?.annotationStorage.size > 0 &&\n this._annotationStorageModified\n ) {\n try {\n // Trigger saving, to prevent data loss in forms; see issue 12257.\n await this.save();\n } catch {\n // Ignoring errors, to ensure that document closing won't break.\n }\n }\n const promises = [];\n\n promises.push(this.pdfLoadingTask.destroy());\n this.pdfLoadingTask = null;\n\n if (this.pdfDocument) {\n this.pdfDocument = null;\n\n this.pdfThumbnailViewer?.setDocument(null);\n this.pdfViewer.setDocument(null);\n this.pdfLinkService.setDocument(null);\n this.pdfDocumentProperties?.setDocument(null);\n }\n this.pdfLinkService.externalLinkEnabled = true;\n this.store = null;\n this.isInitialViewSet = false;\n this.downloadComplete = false;\n this.url = \"\";\n this.baseUrl = \"\";\n this._downloadUrl = \"\";\n this.documentInfo = null;\n this.metadata = null;\n this._contentDispositionFilename = null;\n this._contentLength = null;\n this._saveInProgress = false;\n this._hasAnnotationEditors = false;\n\n promises.push(\n this.pdfScriptingManager.destroyPromise,\n this.passwordPrompt.close()\n );\n\n this.setTitle();\n this.pdfSidebar?.reset();\n this.pdfOutlineViewer?.reset();\n this.pdfAttachmentViewer?.reset();\n this.pdfLayerViewer?.reset();\n\n this.pdfHistory?.reset();\n this.findBar?.reset();\n this.toolbar?.reset();\n this.secondaryToolbar?.reset();\n this._PDFBug?.cleanup();\n\n await Promise.all(promises);\n },\n\n /**\n * Opens a new PDF document.\n * @param {Object} args - Accepts any/all of the properties from\n * {@link DocumentInitParameters}, and also a `originalUrl` string.\n * @returns {Promise} - Promise that is resolved when the document is opened.\n */\n async open(args) {\n if (this.pdfLoadingTask) {\n // We need to destroy already opened document.\n await this.close();\n }\n // Set the necessary global worker parameters, using the available options.\n const workerParams = AppOptions.getAll(OptionKind.WORKER);\n Object.assign(GlobalWorkerOptions, workerParams);\n\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n if (args.data && isPdfFile(args.filename)) {\n this._contentDispositionFilename = args.filename;\n }\n } else if (args.url) {\n // The Firefox built-in viewer always calls `setTitleUsingUrl`, before\n // `initPassiveLoading`, and it never provides an `originalUrl` here.\n this.setTitleUsingUrl(\n args.originalUrl || args.url,\n /* downloadUrl = */ args.url\n );\n }\n // Always set `docBaseUrl` in development mode, and in the (various)\n // extension builds.\n if (typeof PDFJSDev === \"undefined\") {\n AppOptions.set(\"docBaseUrl\", document.URL.split(\"#\", 1)[0]);\n } else if (PDFJSDev.test(\"MOZCENTRAL || CHROME\")) {\n AppOptions.set(\"docBaseUrl\", this.baseUrl);\n }\n\n // Set the necessary API parameters, using all the available options.\n const apiParams = AppOptions.getAll(OptionKind.API);\n const loadingTask = getDocument({\n ...apiParams,\n ...args,\n });\n this.pdfLoadingTask = loadingTask;\n\n loadingTask.onPassword = (updateCallback, reason) => {\n if (this.isViewerEmbedded) {\n // The load event can't be triggered until the password is entered, so\n // if the viewer is in an iframe and its visibility depends on the\n // onload callback then the viewer never shows (bug 1801341).\n this._unblockDocumentLoadEvent();\n }\n\n this.pdfLinkService.externalLinkEnabled = false;\n this.passwordPrompt.setUpdateCallback(updateCallback, reason);\n this.passwordPrompt.open();\n };\n\n loadingTask.onProgress = ({ loaded, total }) => {\n this.progress(loaded / total);\n };\n\n return loadingTask.promise.then(\n pdfDocument => {\n this.load(pdfDocument);\n },\n reason => {\n if (loadingTask !== this.pdfLoadingTask) {\n return undefined; // Ignore errors for previously opened PDF files.\n }\n\n let key = \"pdfjs-loading-error\";\n if (reason instanceof InvalidPDFException) {\n key = \"pdfjs-invalid-file-error\";\n } else if (reason instanceof MissingPDFException) {\n key = \"pdfjs-missing-file-error\";\n } else if (reason instanceof UnexpectedResponseException) {\n key = \"pdfjs-unexpected-response-error\";\n }\n return this._documentError(key, { message: reason.message }).then(\n () => {\n throw reason;\n }\n );\n }\n );\n },\n\n /**\n * @private\n */\n _ensureDownloadComplete() {\n if (this.pdfDocument && this.downloadComplete) {\n return;\n }\n throw new Error(\"PDF document not downloaded.\");\n },\n\n async download(options = {}) {\n const url = this._downloadUrl,\n filename = this._docFilename;\n try {\n this._ensureDownloadComplete();\n\n const data = await this.pdfDocument.getData();\n const blob = new Blob([data], { type: \"application/pdf\" });\n\n await this.downloadManager.download(blob, url, filename, options);\n } catch {\n // When the PDF document isn't ready, or the PDF file is still\n // downloading, simply download using the URL.\n await this.downloadManager.downloadUrl(url, filename, options);\n }\n },\n\n async save(options = {}) {\n if (this._saveInProgress) {\n return;\n }\n this._saveInProgress = true;\n await this.pdfScriptingManager.dispatchWillSave();\n\n const url = this._downloadUrl,\n filename = this._docFilename;\n try {\n this._ensureDownloadComplete();\n\n const data = await this.pdfDocument.saveDocument();\n const blob = new Blob([data], { type: \"application/pdf\" });\n\n await this.downloadManager.download(blob, url, filename, options);\n } catch (reason) {\n // When the PDF document isn't ready, or the PDF file is still\n // downloading, simply fallback to a \"regular\" download.\n console.error(`Error when saving the document: ${reason.message}`);\n await this.download(options);\n } finally {\n await this.pdfScriptingManager.dispatchDidSave();\n this._saveInProgress = false;\n }\n\n if (this._hasAnnotationEditors) {\n this.externalServices.reportTelemetry({\n type: \"editing\",\n data: {\n type: \"save\",\n stats: this.pdfDocument?.annotationStorage.editorStats,\n },\n });\n }\n },\n\n downloadOrSave(options = {}) {\n if (this.pdfDocument?.annotationStorage.size > 0) {\n this.save(options);\n } else {\n this.download(options);\n }\n },\n\n /**\n * Report the error; used for errors affecting loading and/or parsing of\n * the entire PDF document.\n */\n async _documentError(key, moreInfo = null) {\n this._unblockDocumentLoadEvent();\n\n const message = await this._otherError(\n key || \"pdfjs-loading-error\",\n moreInfo\n );\n\n this.eventBus.dispatch(\"documenterror\", {\n source: this,\n message,\n reason: moreInfo?.message ?? null,\n });\n },\n\n /**\n * Report the error; used for errors affecting e.g. only a single page.\n * @param {string} key - The localization key for the error.\n * @param {Object} [moreInfo] - Further information about the error that is\n * more technical. Should have a 'message' and\n * optionally a 'stack' property.\n * @returns {string} A (localized) error message that is human readable.\n */\n async _otherError(key, moreInfo = null) {\n const message = await this.l10n.get(key);\n\n const moreInfoText = [`PDF.js v${version || \"?\"} (build: ${build || \"?\"})`];\n if (moreInfo) {\n moreInfoText.push(`Message: ${moreInfo.message}`);\n\n if (moreInfo.stack) {\n moreInfoText.push(`Stack: ${moreInfo.stack}`);\n } else {\n if (moreInfo.filename) {\n moreInfoText.push(`File: ${moreInfo.filename}`);\n }\n if (moreInfo.lineNumber) {\n moreInfoText.push(`Line: ${moreInfo.lineNumber}`);\n }\n }\n }\n\n console.error(`${message}\\n\\n${moreInfoText.join(\"\\n\")}`);\n return message;\n },\n\n progress(level) {\n if (!this.loadingBar || this.downloadComplete) {\n // Don't accidentally show the loading bar again when the entire file has\n // already been fetched (only an issue when disableAutoFetch is enabled).\n return;\n }\n const percent = Math.round(level * 100);\n // When we transition from full request to range requests, it's possible\n // that we discard some of the loaded data. This can cause the loading\n // bar to move backwards. So prevent this by only updating the bar if it\n // increases.\n if (percent <= this.loadingBar.percent) {\n return;\n }\n this.loadingBar.percent = percent;\n\n // When disableAutoFetch is enabled, it's not uncommon for the entire file\n // to never be fetched (depends on e.g. the file structure). In this case\n // the loading bar will not be completely filled, nor will it be hidden.\n // To prevent displaying a partially filled loading bar permanently, we\n // hide it when no data has been loaded during a certain amount of time.\n if (\n this.pdfDocument?.loadingParams.disableAutoFetch ??\n AppOptions.get(\"disableAutoFetch\")\n ) {\n this.loadingBar.setDisableAutoFetch();\n }\n },\n\n load(pdfDocument) {\n this.pdfDocument = pdfDocument;\n\n pdfDocument.getDownloadInfo().then(({ length }) => {\n this._contentLength = length; // Ensure that the correct length is used.\n this.downloadComplete = true;\n this.loadingBar?.hide();\n\n firstPagePromise.then(() => {\n this.eventBus.dispatch(\"documentloaded\", { source: this });\n });\n });\n\n // Since the `setInitialView` call below depends on this being resolved,\n // fetch it early to avoid delaying initial rendering of the PDF document.\n const pageLayoutPromise = pdfDocument.getPageLayout().catch(() => {\n /* Avoid breaking initial rendering; ignoring errors. */\n });\n const pageModePromise = pdfDocument.getPageMode().catch(() => {\n /* Avoid breaking initial rendering; ignoring errors. */\n });\n const openActionPromise = pdfDocument.getOpenAction().catch(() => {\n /* Avoid breaking initial rendering; ignoring errors. */\n });\n\n this.toolbar?.setPagesCount(pdfDocument.numPages, false);\n this.secondaryToolbar?.setPagesCount(pdfDocument.numPages);\n\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"CHROME\")) {\n const baseUrl = location.href.split(\"#\", 1)[0];\n // Ignore \"data:\"-URLs for performance reasons, even though it may cause\n // internal links to not work perfectly in all cases (see bug 1803050).\n this.pdfLinkService.setDocument(\n pdfDocument,\n isDataScheme(baseUrl) ? null : baseUrl\n );\n } else {\n this.pdfLinkService.setDocument(pdfDocument);\n }\n this.pdfDocumentProperties?.setDocument(pdfDocument);\n\n const pdfViewer = this.pdfViewer;\n pdfViewer.setDocument(pdfDocument);\n const { firstPagePromise, onePageRendered, pagesPromise } = pdfViewer;\n\n this.pdfThumbnailViewer?.setDocument(pdfDocument);\n\n const storedPromise = (this.store = new ViewHistory(\n pdfDocument.fingerprints[0]\n ))\n .getMultiple({\n page: null,\n zoom: DEFAULT_SCALE_VALUE,\n scrollLeft: \"0\",\n scrollTop: \"0\",\n rotation: null,\n sidebarView: SidebarView.UNKNOWN,\n scrollMode: ScrollMode.UNKNOWN,\n spreadMode: SpreadMode.UNKNOWN,\n })\n .catch(() => {\n /* Unable to read from storage; ignoring errors. */\n });\n\n firstPagePromise.then(pdfPage => {\n this.loadingBar?.setWidth(this.appConfig.viewerContainer);\n this._initializeAnnotationStorageCallbacks(pdfDocument);\n\n Promise.all([\n animationStarted,\n storedPromise,\n pageLayoutPromise,\n pageModePromise,\n openActionPromise,\n ])\n .then(async ([timeStamp, stored, pageLayout, pageMode, openAction]) => {\n const viewOnLoad = AppOptions.get(\"viewOnLoad\");\n\n this._initializePdfHistory({\n fingerprint: pdfDocument.fingerprints[0],\n viewOnLoad,\n initialDest: openAction?.dest,\n });\n const initialBookmark = this.initialBookmark;\n\n // Initialize the default values, from user preferences.\n const zoom = AppOptions.get(\"defaultZoomValue\");\n let hash = zoom ? `zoom=${zoom}` : null;\n\n let rotation = null;\n let sidebarView = AppOptions.get(\"sidebarViewOnLoad\");\n let scrollMode = AppOptions.get(\"scrollModeOnLoad\");\n let spreadMode = AppOptions.get(\"spreadModeOnLoad\");\n\n if (stored?.page && viewOnLoad !== ViewOnLoad.INITIAL) {\n hash =\n `page=${stored.page}&zoom=${zoom || stored.zoom},` +\n `${stored.scrollLeft},${stored.scrollTop}`;\n\n rotation = parseInt(stored.rotation, 10);\n // Always let user preference take precedence over the view history.\n if (sidebarView === SidebarView.UNKNOWN) {\n sidebarView = stored.sidebarView | 0;\n }\n if (scrollMode === ScrollMode.UNKNOWN) {\n scrollMode = stored.scrollMode | 0;\n }\n if (spreadMode === SpreadMode.UNKNOWN) {\n spreadMode = stored.spreadMode | 0;\n }\n }\n // Always let the user preference/view history take precedence.\n if (pageMode && sidebarView === SidebarView.UNKNOWN) {\n sidebarView = apiPageModeToSidebarView(pageMode);\n }\n if (\n pageLayout &&\n scrollMode === ScrollMode.UNKNOWN &&\n spreadMode === SpreadMode.UNKNOWN\n ) {\n const modes = apiPageLayoutToViewerModes(pageLayout);\n // TODO: Try to improve page-switching when using the mouse-wheel\n // and/or arrow-keys before allowing the document to control this.\n // scrollMode = modes.scrollMode;\n spreadMode = modes.spreadMode;\n }\n\n this.setInitialView(hash, {\n rotation,\n sidebarView,\n scrollMode,\n spreadMode,\n });\n this.eventBus.dispatch(\"documentinit\", { source: this });\n // Make all navigation keys work on document load,\n // unless the viewer is embedded in a web page.\n if (!this.isViewerEmbedded) {\n pdfViewer.focus();\n }\n\n // For documents with different page sizes, once all pages are\n // resolved, ensure that the correct location becomes visible on load.\n // (To reduce the risk, in very large and/or slow loading documents,\n // that the location changes *after* the user has started interacting\n // with the viewer, wait for either `pagesPromise` or a timeout.)\n await Promise.race([\n pagesPromise,\n new Promise(resolve => {\n setTimeout(resolve, FORCE_PAGES_LOADED_TIMEOUT);\n }),\n ]);\n if (!initialBookmark && !hash) {\n return;\n }\n if (pdfViewer.hasEqualPageSizes) {\n return;\n }\n this.initialBookmark = initialBookmark;\n\n // eslint-disable-next-line no-self-assign\n pdfViewer.currentScaleValue = pdfViewer.currentScaleValue;\n // Re-apply the initial document location.\n this.setInitialView(hash);\n })\n .catch(() => {\n // Ensure that the document is always completely initialized,\n // even if there are any errors thrown above.\n this.setInitialView();\n })\n .then(function () {\n // At this point, rendering of the initial page(s) should always have\n // started (and may even have completed).\n // To prevent any future issues, e.g. the document being completely\n // blank on load, always trigger rendering here.\n pdfViewer.update();\n });\n });\n\n pagesPromise.then(\n () => {\n this._unblockDocumentLoadEvent();\n\n this._initializeAutoPrint(pdfDocument, openActionPromise);\n },\n reason => {\n this._documentError(\"pdfjs-loading-error\", { message: reason.message });\n }\n );\n\n onePageRendered.then(data => {\n this.externalServices.reportTelemetry({\n type: \"pageInfo\",\n timestamp: data.timestamp,\n });\n\n if (this.pdfOutlineViewer) {\n pdfDocument.getOutline().then(outline => {\n if (pdfDocument !== this.pdfDocument) {\n return; // The document was closed while the outline resolved.\n }\n this.pdfOutlineViewer.render({ outline, pdfDocument });\n });\n }\n if (this.pdfAttachmentViewer) {\n pdfDocument.getAttachments().then(attachments => {\n if (pdfDocument !== this.pdfDocument) {\n return; // The document was closed while the attachments resolved.\n }\n this.pdfAttachmentViewer.render({ attachments });\n });\n }\n if (this.pdfLayerViewer) {\n // Ensure that the layers accurately reflects the current state in the\n // viewer itself, rather than the default state provided by the API.\n pdfViewer.optionalContentConfigPromise.then(optionalContentConfig => {\n if (pdfDocument !== this.pdfDocument) {\n return; // The document was closed while the layers resolved.\n }\n this.pdfLayerViewer.render({ optionalContentConfig, pdfDocument });\n });\n }\n });\n\n this._initializePageLabels(pdfDocument);\n this._initializeMetadata(pdfDocument);\n },\n\n /**\n * @private\n */\n async _scriptingDocProperties(pdfDocument) {\n if (!this.documentInfo) {\n // It should be *extremely* rare for metadata to not have been resolved\n // when this code runs, but ensure that we handle that case here.\n await new Promise(resolve => {\n this.eventBus._on(\"metadataloaded\", resolve, { once: true });\n });\n if (pdfDocument !== this.pdfDocument) {\n return null; // The document was closed while the metadata resolved.\n }\n }\n if (!this._contentLength) {\n // Always waiting for the entire PDF document to be loaded will, most\n // likely, delay sandbox-creation too much in the general case for all\n // PDF documents which are not provided as binary data to the API.\n // Hence we'll simply have to trust that the `contentLength` (as provided\n // by the server), when it exists, is accurate enough here.\n await new Promise(resolve => {\n this.eventBus._on(\"documentloaded\", resolve, { once: true });\n });\n if (pdfDocument !== this.pdfDocument) {\n return null; // The document was closed while the downloadInfo resolved.\n }\n }\n\n return {\n ...this.documentInfo,\n baseURL: this.baseUrl,\n filesize: this._contentLength,\n filename: this._docFilename,\n metadata: this.metadata?.getRaw(),\n authors: this.metadata?.get(\"dc:creator\"),\n numPages: this.pagesCount,\n URL: this.url,\n };\n },\n\n /**\n * @private\n */\n async _initializeAutoPrint(pdfDocument, openActionPromise) {\n const [openAction, jsActions] = await Promise.all([\n openActionPromise,\n this.pdfViewer.enableScripting ? null : pdfDocument.getJSActions(),\n ]);\n\n if (pdfDocument !== this.pdfDocument) {\n return; // The document was closed while the auto print data resolved.\n }\n let triggerAutoPrint = openAction?.action === \"Print\";\n\n if (jsActions) {\n console.warn(\"Warning: JavaScript support is not enabled\");\n\n // Hack to support auto printing.\n for (const name in jsActions) {\n if (triggerAutoPrint) {\n break;\n }\n switch (name) {\n case \"WillClose\":\n case \"WillSave\":\n case \"DidSave\":\n case \"WillPrint\":\n case \"DidPrint\":\n continue;\n }\n triggerAutoPrint = jsActions[name].some(js => AutoPrintRegExp.test(js));\n }\n }\n\n if (triggerAutoPrint) {\n this.triggerPrinting();\n }\n },\n\n /**\n * @private\n */\n async _initializeMetadata(pdfDocument) {\n const { info, metadata, contentDispositionFilename, contentLength } =\n await pdfDocument.getMetadata();\n\n if (pdfDocument !== this.pdfDocument) {\n return; // The document was closed while the metadata resolved.\n }\n this.documentInfo = info;\n this.metadata = metadata;\n this._contentDispositionFilename ??= contentDispositionFilename;\n this._contentLength ??= contentLength; // See `getDownloadInfo`-call above.\n\n // Provides some basic debug information\n console.log(\n `PDF ${pdfDocument.fingerprints[0]} [${info.PDFFormatVersion} ` +\n `${(info.Producer || \"-\").trim()} / ${(info.Creator || \"-\").trim()}] ` +\n `(PDF.js: ${version || \"?\"} [${build || \"?\"}])`\n );\n let pdfTitle = info.Title;\n\n const metadataTitle = metadata?.get(\"dc:title\");\n if (metadataTitle) {\n // Ghostscript can produce invalid 'dc:title' Metadata entries:\n // - The title may be \"Untitled\" (fixes bug 1031612).\n // - The title may contain incorrectly encoded characters, which thus\n // looks broken, hence we ignore the Metadata entry when it contains\n // characters from the Specials Unicode block (fixes bug 1605526).\n if (\n metadataTitle !== \"Untitled\" &&\n !/[\\uFFF0-\\uFFFF]/g.test(metadataTitle)\n ) {\n pdfTitle = metadataTitle;\n }\n }\n if (pdfTitle) {\n this.setTitle(\n `${pdfTitle} - ${this._contentDispositionFilename || this._title}`\n );\n } else if (this._contentDispositionFilename) {\n this.setTitle(this._contentDispositionFilename);\n }\n\n if (\n info.IsXFAPresent &&\n !info.IsAcroFormPresent &&\n !pdfDocument.isPureXfa\n ) {\n if (pdfDocument.loadingParams.enableXfa) {\n console.warn(\"Warning: XFA Foreground documents are not supported\");\n } else {\n console.warn(\"Warning: XFA support is not enabled\");\n }\n } else if (\n (info.IsAcroFormPresent || info.IsXFAPresent) &&\n !this.pdfViewer.renderForms\n ) {\n console.warn(\"Warning: Interactive form support is not enabled\");\n }\n\n if (info.IsSignaturesPresent) {\n console.warn(\"Warning: Digital signatures validation is not supported\");\n }\n\n this.eventBus.dispatch(\"metadataloaded\", { source: this });\n },\n\n /**\n * @private\n */\n async _initializePageLabels(pdfDocument) {\n if (\n typeof PDFJSDev === \"undefined\"\n ? window.isGECKOVIEW\n : PDFJSDev.test(\"GECKOVIEW\")\n ) {\n return;\n }\n const labels = await pdfDocument.getPageLabels();\n\n if (pdfDocument !== this.pdfDocument) {\n return; // The document was closed while the page labels resolved.\n }\n if (!labels || AppOptions.get(\"disablePageLabels\")) {\n return;\n }\n const numLabels = labels.length;\n // Ignore page labels that correspond to standard page numbering,\n // or page labels that are all empty.\n let standardLabels = 0,\n emptyLabels = 0;\n for (let i = 0; i < numLabels; i++) {\n const label = labels[i];\n if (label === (i + 1).toString()) {\n standardLabels++;\n } else if (label === \"\") {\n emptyLabels++;\n } else {\n break;\n }\n }\n if (standardLabels >= numLabels || emptyLabels >= numLabels) {\n return;\n }\n const { pdfViewer, pdfThumbnailViewer, toolbar } = this;\n\n pdfViewer.setPageLabels(labels);\n pdfThumbnailViewer?.setPageLabels(labels);\n\n // Changing toolbar page display to use labels and we need to set\n // the label of the current page.\n toolbar?.setPagesCount(numLabels, true);\n toolbar?.setPageNumber(\n pdfViewer.currentPageNumber,\n pdfViewer.currentPageLabel\n );\n },\n\n /**\n * @private\n */\n _initializePdfHistory({ fingerprint, viewOnLoad, initialDest = null }) {\n if (!this.pdfHistory) {\n return;\n }\n this.pdfHistory.initialize({\n fingerprint,\n resetHistory: viewOnLoad === ViewOnLoad.INITIAL,\n updateUrl: AppOptions.get(\"historyUpdateUrl\"),\n });\n\n if (this.pdfHistory.initialBookmark) {\n this.initialBookmark = this.pdfHistory.initialBookmark;\n\n this.initialRotation = this.pdfHistory.initialRotation;\n }\n\n // Always let the browser history/document hash take precedence.\n if (\n initialDest &&\n !this.initialBookmark &&\n viewOnLoad === ViewOnLoad.UNKNOWN\n ) {\n this.initialBookmark = JSON.stringify(initialDest);\n // TODO: Re-factor the `PDFHistory` initialization to remove this hack\n // that's currently necessary to prevent weird initial history state.\n this.pdfHistory.push({ explicitDest: initialDest, pageNumber: null });\n }\n },\n\n /**\n * @private\n */\n _initializeAnnotationStorageCallbacks(pdfDocument) {\n if (pdfDocument !== this.pdfDocument) {\n return;\n }\n const { annotationStorage } = pdfDocument;\n\n annotationStorage.onSetModified = () => {\n window.addEventListener(\"beforeunload\", beforeUnload);\n\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n this._annotationStorageModified = true;\n }\n };\n annotationStorage.onResetModified = () => {\n window.removeEventListener(\"beforeunload\", beforeUnload);\n\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n delete this._annotationStorageModified;\n }\n };\n annotationStorage.onAnnotationEditor = typeStr => {\n this._hasAnnotationEditors = !!typeStr;\n this.setTitle();\n };\n },\n\n setInitialView(\n storedHash,\n { rotation, sidebarView, scrollMode, spreadMode } = {}\n ) {\n const setRotation = angle => {\n if (isValidRotation(angle)) {\n this.pdfViewer.pagesRotation = angle;\n }\n };\n const setViewerModes = (scroll, spread) => {\n if (isValidScrollMode(scroll)) {\n this.pdfViewer.scrollMode = scroll;\n }\n if (isValidSpreadMode(spread)) {\n this.pdfViewer.spreadMode = spread;\n }\n };\n this.isInitialViewSet = true;\n this.pdfSidebar?.setInitialView(sidebarView);\n\n setViewerModes(scrollMode, spreadMode);\n\n if (this.initialBookmark) {\n setRotation(this.initialRotation);\n delete this.initialRotation;\n\n this.pdfLinkService.setHash(this.initialBookmark);\n this.initialBookmark = null;\n } else if (storedHash) {\n setRotation(rotation);\n\n this.pdfLinkService.setHash(storedHash);\n }\n\n // Ensure that the correct page number is displayed in the UI,\n // even if the active page didn't change during document load.\n this.toolbar?.setPageNumber(\n this.pdfViewer.currentPageNumber,\n this.pdfViewer.currentPageLabel\n );\n this.secondaryToolbar?.setPageNumber(this.pdfViewer.currentPageNumber);\n\n if (!this.pdfViewer.currentScaleValue) {\n // Scale was not initialized: invalid bookmark or scale was not specified.\n // Setting the default one.\n this.pdfViewer.currentScaleValue = DEFAULT_SCALE_VALUE;\n }\n },\n\n /**\n * @private\n */\n _cleanup() {\n if (!this.pdfDocument) {\n return; // run cleanup when document is loaded\n }\n this.pdfViewer.cleanup();\n this.pdfThumbnailViewer?.cleanup();\n\n this.pdfDocument.cleanup(\n /* keepLoadedFonts = */ AppOptions.get(\"fontExtraProperties\")\n );\n },\n\n forceRendering() {\n this.pdfRenderingQueue.printing = !!this.printService;\n this.pdfRenderingQueue.isThumbnailViewEnabled =\n this.pdfSidebar?.visibleView === SidebarView.THUMBS;\n this.pdfRenderingQueue.renderHighestPriority();\n },\n\n beforePrint() {\n this._printAnnotationStoragePromise = this.pdfScriptingManager\n .dispatchWillPrint()\n .catch(() => {\n /* Avoid breaking printing; ignoring errors. */\n })\n .then(() => this.pdfDocument?.annotationStorage.print);\n\n if (this.printService) {\n // There is no way to suppress beforePrint/afterPrint events,\n // but PDFPrintService may generate double events -- this will ignore\n // the second event that will be coming from native window.print().\n return;\n }\n\n if (!this.supportsPrinting) {\n this._otherError(\"pdfjs-printing-not-supported\");\n return;\n }\n\n // The beforePrint is a sync method and we need to know layout before\n // returning from this method. Ensure that we can get sizes of the pages.\n if (!this.pdfViewer.pageViewsReady) {\n this.l10n.get(\"pdfjs-printing-not-ready\").then(msg => {\n // eslint-disable-next-line no-alert\n window.alert(msg);\n });\n return;\n }\n\n this.printService = PDFPrintServiceFactory.createPrintService({\n pdfDocument: this.pdfDocument,\n pagesOverview: this.pdfViewer.getPagesOverview(),\n printContainer: this.appConfig.printContainer,\n printResolution: AppOptions.get(\"printResolution\"),\n printAnnotationStoragePromise: this._printAnnotationStoragePromise,\n });\n this.forceRendering();\n // Disable the editor-indicator during printing (fixes bug 1790552).\n this.setTitle();\n\n this.printService.layout();\n\n if (this._hasAnnotationEditors) {\n this.externalServices.reportTelemetry({\n type: \"editing\",\n data: {\n type: \"print\",\n stats: this.pdfDocument?.annotationStorage.editorStats,\n },\n });\n }\n },\n\n afterPrint() {\n if (this._printAnnotationStoragePromise) {\n this._printAnnotationStoragePromise.then(() => {\n this.pdfScriptingManager.dispatchDidPrint();\n });\n this._printAnnotationStoragePromise = null;\n }\n\n if (this.printService) {\n this.printService.destroy();\n this.printService = null;\n\n this.pdfDocument?.annotationStorage.resetModified();\n }\n this.forceRendering();\n // Re-enable the editor-indicator after printing (fixes bug 1790552).\n this.setTitle();\n },\n\n rotatePages(delta) {\n this.pdfViewer.pagesRotation += delta;\n // Note that the thumbnail viewer is updated, and rendering is triggered,\n // in the 'rotationchanging' event handler.\n },\n\n requestPresentationMode() {\n this.pdfPresentationMode?.request();\n },\n\n triggerPrinting() {\n if (!this.supportsPrinting) {\n return;\n }\n window.print();\n },\n\n bindEvents() {\n if (this._eventBusAbortController) {\n return;\n }\n this._eventBusAbortController = new AbortController();\n\n const {\n eventBus,\n _eventBusAbortController: { signal },\n } = this;\n\n eventBus._on(\"resize\", webViewerResize, { signal });\n eventBus._on(\"hashchange\", webViewerHashchange, { signal });\n eventBus._on(\"beforeprint\", this.beforePrint.bind(this), { signal });\n eventBus._on(\"afterprint\", this.afterPrint.bind(this), { signal });\n eventBus._on(\"pagerender\", webViewerPageRender, { signal });\n eventBus._on(\"pagerendered\", webViewerPageRendered, { signal });\n eventBus._on(\"updateviewarea\", webViewerUpdateViewarea, { signal });\n eventBus._on(\"pagechanging\", webViewerPageChanging, { signal });\n eventBus._on(\"scalechanging\", webViewerScaleChanging, { signal });\n eventBus._on(\"rotationchanging\", webViewerRotationChanging, { signal });\n eventBus._on(\"sidebarviewchanged\", webViewerSidebarViewChanged, { signal });\n eventBus._on(\"pagemode\", webViewerPageMode, { signal });\n eventBus._on(\"namedaction\", webViewerNamedAction, { signal });\n eventBus._on(\"presentationmodechanged\", webViewerPresentationModeChanged, {\n signal,\n });\n eventBus._on(\"presentationmode\", webViewerPresentationMode, { signal });\n eventBus._on(\n \"switchannotationeditormode\",\n webViewerSwitchAnnotationEditorMode,\n { signal }\n );\n eventBus._on(\n \"switchannotationeditorparams\",\n webViewerSwitchAnnotationEditorParams,\n { signal }\n );\n eventBus._on(\"print\", webViewerPrint, { signal });\n eventBus._on(\"download\", webViewerDownload, { signal });\n eventBus._on(\"firstpage\", webViewerFirstPage, { signal });\n eventBus._on(\"lastpage\", webViewerLastPage, { signal });\n eventBus._on(\"nextpage\", webViewerNextPage, { signal });\n eventBus._on(\"previouspage\", webViewerPreviousPage, { signal });\n eventBus._on(\"zoomin\", webViewerZoomIn, { signal });\n eventBus._on(\"zoomout\", webViewerZoomOut, { signal });\n eventBus._on(\"zoomreset\", webViewerZoomReset, { signal });\n eventBus._on(\"pagenumberchanged\", webViewerPageNumberChanged, { signal });\n eventBus._on(\"scalechanged\", webViewerScaleChanged, { signal });\n eventBus._on(\"rotatecw\", webViewerRotateCw, { signal });\n eventBus._on(\"rotateccw\", webViewerRotateCcw, { signal });\n eventBus._on(\"optionalcontentconfig\", webViewerOptionalContentConfig, {\n signal,\n });\n eventBus._on(\"switchscrollmode\", webViewerSwitchScrollMode, { signal });\n eventBus._on(\"scrollmodechanged\", webViewerScrollModeChanged, { signal });\n eventBus._on(\"switchspreadmode\", webViewerSwitchSpreadMode, { signal });\n eventBus._on(\"spreadmodechanged\", webViewerSpreadModeChanged, { signal });\n eventBus._on(\"documentproperties\", webViewerDocumentProperties, { signal });\n eventBus._on(\"findfromurlhash\", webViewerFindFromUrlHash, { signal });\n eventBus._on(\"updatefindmatchescount\", webViewerUpdateFindMatchesCount, {\n signal,\n });\n eventBus._on(\"updatefindcontrolstate\", webViewerUpdateFindControlState, {\n signal,\n });\n\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n eventBus._on(\"fileinputchange\", webViewerFileInputChange, { signal });\n eventBus._on(\"openfile\", webViewerOpenFile, { signal });\n }\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n eventBus._on(\n \"annotationeditorstateschanged\",\n webViewerAnnotationEditorStatesChanged,\n { signal }\n );\n eventBus._on(\"reporttelemetry\", webViewerReportTelemetry, { signal });\n }\n },\n\n bindWindowEvents() {\n if (this._windowAbortController) {\n return;\n }\n this._windowAbortController = new AbortController();\n\n const {\n eventBus,\n appConfig: { mainContainer },\n _windowAbortController: { signal },\n } = this;\n\n function addWindowResolutionChange(evt = null) {\n if (evt) {\n webViewerResolutionChange(evt);\n }\n const mediaQueryList = window.matchMedia(\n `(resolution: ${window.devicePixelRatio || 1}dppx)`\n );\n mediaQueryList.addEventListener(\"change\", addWindowResolutionChange, {\n once: true,\n signal,\n });\n }\n addWindowResolutionChange();\n\n window.addEventListener(\"visibilitychange\", webViewerVisibilityChange, {\n signal,\n });\n window.addEventListener(\"wheel\", webViewerWheel, {\n passive: false,\n signal,\n });\n window.addEventListener(\"touchstart\", webViewerTouchStart, {\n passive: false,\n signal,\n });\n window.addEventListener(\"touchmove\", webViewerTouchMove, {\n passive: false,\n signal,\n });\n window.addEventListener(\"touchend\", webViewerTouchEnd, {\n passive: false,\n signal,\n });\n window.addEventListener(\"click\", webViewerClick, { signal });\n window.addEventListener(\"keydown\", webViewerKeyDown, { signal });\n window.addEventListener(\"keyup\", webViewerKeyUp, { signal });\n window.addEventListener(\n \"resize\",\n () => {\n eventBus.dispatch(\"resize\", { source: window });\n },\n { signal }\n );\n window.addEventListener(\n \"hashchange\",\n () => {\n eventBus.dispatch(\"hashchange\", {\n source: window,\n hash: document.location.hash.substring(1),\n });\n },\n { signal }\n );\n window.addEventListener(\n \"beforeprint\",\n () => {\n eventBus.dispatch(\"beforeprint\", { source: window });\n },\n { signal }\n );\n window.addEventListener(\n \"afterprint\",\n () => {\n eventBus.dispatch(\"afterprint\", { source: window });\n },\n { signal }\n );\n window.addEventListener(\n \"updatefromsandbox\",\n event => {\n eventBus.dispatch(\"updatefromsandbox\", {\n source: window,\n detail: event.detail,\n });\n },\n { signal }\n );\n\n if (\n (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"MOZCENTRAL\")) &&\n !(\"onscrollend\" in document.documentElement)\n ) {\n return;\n }\n if (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"MOZCENTRAL\")) {\n // Using the values lastScrollTop and lastScrollLeft is a workaround to\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1881974.\n // TODO: remove them once the bug is fixed.\n ({ scrollTop: this._lastScrollTop, scrollLeft: this._lastScrollLeft } =\n mainContainer);\n }\n\n const scrollend = () => {\n if (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"MOZCENTRAL\")) {\n ({ scrollTop: this._lastScrollTop, scrollLeft: this._lastScrollLeft } =\n mainContainer);\n }\n\n this._isScrolling = false;\n mainContainer.addEventListener(\"scroll\", scroll, {\n passive: true,\n signal,\n });\n mainContainer.removeEventListener(\"scrollend\", scrollend);\n mainContainer.removeEventListener(\"blur\", scrollend);\n };\n const scroll = () => {\n if (this._isCtrlKeyDown) {\n return;\n }\n if (\n (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"MOZCENTRAL\")) &&\n this._lastScrollTop === mainContainer.scrollTop &&\n this._lastScrollLeft === mainContainer.scrollLeft\n ) {\n return;\n }\n\n mainContainer.removeEventListener(\"scroll\", scroll, { passive: true });\n this._isScrolling = true;\n mainContainer.addEventListener(\"scrollend\", scrollend, { signal });\n mainContainer.addEventListener(\"blur\", scrollend, { signal });\n };\n mainContainer.addEventListener(\"scroll\", scroll, {\n passive: true,\n signal,\n });\n },\n\n unbindEvents() {\n this._eventBusAbortController?.abort();\n this._eventBusAbortController = null;\n },\n\n unbindWindowEvents() {\n this._windowAbortController?.abort();\n this._windowAbortController = null;\n },\n\n _accumulateTicks(ticks, prop) {\n // If the direction changed, reset the accumulated ticks.\n if ((this[prop] > 0 && ticks < 0) || (this[prop] < 0 && ticks > 0)) {\n this[prop] = 0;\n }\n this[prop] += ticks;\n const wholeTicks = Math.trunc(this[prop]);\n this[prop] -= wholeTicks;\n return wholeTicks;\n },\n\n _accumulateFactor(previousScale, factor, prop) {\n if (factor === 1) {\n return 1;\n }\n // If the direction changed, reset the accumulated factor.\n if ((this[prop] > 1 && factor < 1) || (this[prop] < 1 && factor > 1)) {\n this[prop] = 1;\n }\n\n const newFactor =\n Math.floor(previousScale * factor * this[prop] * 100) /\n (100 * previousScale);\n this[prop] = factor / newFactor;\n\n return newFactor;\n },\n\n _centerAtPos(previousScale, x, y) {\n const { pdfViewer } = this;\n const scaleDiff = pdfViewer.currentScale / previousScale - 1;\n if (scaleDiff !== 0) {\n const [top, left] = pdfViewer.containerTopLeft;\n pdfViewer.container.scrollLeft += (x - left) * scaleDiff;\n pdfViewer.container.scrollTop += (y - top) * scaleDiff;\n }\n },\n\n /**\n * Should be called *after* all pages have loaded, or if an error occurred,\n * to unblock the \"load\" event; see https://bugzilla.mozilla.org/show_bug.cgi?id=1618553\n * @private\n */\n _unblockDocumentLoadEvent() {\n document.blockUnblockOnload?.(false);\n\n // Ensure that this method is only ever run once.\n this._unblockDocumentLoadEvent = () => {};\n },\n\n /**\n * Used together with the integration-tests, to enable awaiting full\n * initialization of the scripting/sandbox.\n */\n get scriptingReady() {\n return this.pdfScriptingManager.ready;\n },\n};\n\ninitCom(PDFViewerApplication);\n\nif (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"MOZCENTRAL\")) {\n PDFPrintServiceFactory.initGlobals(PDFViewerApplication);\n}\n\nif (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n const HOSTED_VIEWER_ORIGINS = [\n \"null\",\n \"http://mozilla.github.io\",\n \"https://mozilla.github.io\",\n ];\n // eslint-disable-next-line no-var\n var validateFileURL = function (file) {\n if (!file) {\n return;\n }\n try {\n const viewerOrigin = new URL(window.location.href).origin || \"null\";\n if (HOSTED_VIEWER_ORIGINS.includes(viewerOrigin)) {\n // Hosted or local viewer, allow for any file locations\n return;\n }\n const fileOrigin = new URL(file, window.location.href).origin;\n // Removing of the following line will not guarantee that the viewer will\n // start accepting URLs from foreign origin -- CORS headers on the remote\n // server must be properly configured.\n if (fileOrigin !== viewerOrigin) {\n throw new Error(\"file origin does not match viewer's\");\n }\n } catch (ex) {\n PDFViewerApplication._documentError(\"pdfjs-loading-error\", {\n message: ex.message,\n });\n throw ex;\n }\n };\n}\n\nfunction webViewerPageRender({ pageNumber }) {\n // If the page is (the most) visible when it starts rendering,\n // ensure that the page number input loading indicator is displayed.\n if (pageNumber === PDFViewerApplication.page) {\n PDFViewerApplication.toolbar?.updateLoadingIndicatorState(true);\n }\n}\n\nfunction webViewerPageRendered({ pageNumber, error }) {\n // If the page is still visible when it has finished rendering,\n // ensure that the page number input loading indicator is hidden.\n if (pageNumber === PDFViewerApplication.page) {\n PDFViewerApplication.toolbar?.updateLoadingIndicatorState(false);\n }\n\n // Use the rendered page to set the corresponding thumbnail image.\n if (PDFViewerApplication.pdfSidebar?.visibleView === SidebarView.THUMBS) {\n const pageView = PDFViewerApplication.pdfViewer.getPageView(\n /* index = */ pageNumber - 1\n );\n const thumbnailView = PDFViewerApplication.pdfThumbnailViewer?.getThumbnail(\n /* index = */ pageNumber - 1\n );\n if (pageView) {\n thumbnailView?.setImage(pageView);\n }\n }\n\n if (error) {\n PDFViewerApplication._otherError(\"pdfjs-rendering-error\", error);\n }\n}\n\nfunction webViewerPageMode({ mode }) {\n // Handle the 'pagemode' hash parameter, see also `PDFLinkService_setHash`.\n let view;\n switch (mode) {\n case \"thumbs\":\n view = SidebarView.THUMBS;\n break;\n case \"bookmarks\":\n case \"outline\": // non-standard\n view = SidebarView.OUTLINE;\n break;\n case \"attachments\": // non-standard\n view = SidebarView.ATTACHMENTS;\n break;\n case \"layers\": // non-standard\n view = SidebarView.LAYERS;\n break;\n case \"none\":\n view = SidebarView.NONE;\n break;\n default:\n console.error('Invalid \"pagemode\" hash parameter: ' + mode);\n return;\n }\n PDFViewerApplication.pdfSidebar?.switchView(view, /* forceOpen = */ true);\n}\n\nfunction webViewerNamedAction(evt) {\n // Processing a couple of named actions that might be useful, see also\n // `PDFLinkService.executeNamedAction`.\n switch (evt.action) {\n case \"GoToPage\":\n PDFViewerApplication.appConfig.toolbar?.pageNumber.select();\n break;\n\n case \"Find\":\n if (!PDFViewerApplication.supportsIntegratedFind) {\n PDFViewerApplication.findBar?.toggle();\n }\n break;\n\n case \"Print\":\n PDFViewerApplication.triggerPrinting();\n break;\n\n case \"SaveAs\":\n PDFViewerApplication.downloadOrSave();\n break;\n }\n}\n\nfunction webViewerPresentationModeChanged(evt) {\n PDFViewerApplication.pdfViewer.presentationModeState = evt.state;\n}\n\nfunction webViewerSidebarViewChanged({ view }) {\n PDFViewerApplication.pdfRenderingQueue.isThumbnailViewEnabled =\n view === SidebarView.THUMBS;\n\n if (PDFViewerApplication.isInitialViewSet) {\n // Only update the storage when the document has been loaded *and* rendered.\n PDFViewerApplication.store?.set(\"sidebarView\", view).catch(() => {\n // Unable to write to storage.\n });\n }\n}\n\nfunction webViewerUpdateViewarea({ location }) {\n if (PDFViewerApplication.isInitialViewSet) {\n // Only update the storage when the document has been loaded *and* rendered.\n PDFViewerApplication.store\n ?.setMultiple({\n page: location.pageNumber,\n zoom: location.scale,\n scrollLeft: location.left,\n scrollTop: location.top,\n rotation: location.rotation,\n })\n .catch(() => {\n // Unable to write to storage.\n });\n }\n if (PDFViewerApplication.appConfig.secondaryToolbar) {\n const href = PDFViewerApplication.pdfLinkService.getAnchorUrl(\n location.pdfOpenParams\n );\n PDFViewerApplication.appConfig.secondaryToolbar.viewBookmarkButton.href =\n href;\n }\n}\n\nfunction webViewerScrollModeChanged(evt) {\n if (\n PDFViewerApplication.isInitialViewSet &&\n !PDFViewerApplication.pdfViewer.isInPresentationMode\n ) {\n // Only update the storage when the document has been loaded *and* rendered.\n PDFViewerApplication.store?.set(\"scrollMode\", evt.mode).catch(() => {\n // Unable to write to storage.\n });\n }\n}\n\nfunction webViewerSpreadModeChanged(evt) {\n if (\n PDFViewerApplication.isInitialViewSet &&\n !PDFViewerApplication.pdfViewer.isInPresentationMode\n ) {\n // Only update the storage when the document has been loaded *and* rendered.\n PDFViewerApplication.store?.set(\"spreadMode\", evt.mode).catch(() => {\n // Unable to write to storage.\n });\n }\n}\n\nfunction webViewerResize() {\n const { pdfDocument, pdfViewer, pdfRenderingQueue } = PDFViewerApplication;\n\n if (pdfRenderingQueue.printing && window.matchMedia(\"print\").matches) {\n // Work-around issue 15324 by ignoring \"resize\" events during printing.\n return;\n }\n\n if (!pdfDocument) {\n return;\n }\n const currentScaleValue = pdfViewer.currentScaleValue;\n if (\n currentScaleValue === \"auto\" ||\n currentScaleValue === \"page-fit\" ||\n currentScaleValue === \"page-width\"\n ) {\n // Note: the scale is constant for 'page-actual'.\n pdfViewer.currentScaleValue = currentScaleValue;\n }\n pdfViewer.update();\n}\n\nfunction webViewerHashchange(evt) {\n const hash = evt.hash;\n if (!hash) {\n return;\n }\n if (!PDFViewerApplication.isInitialViewSet) {\n PDFViewerApplication.initialBookmark = hash;\n } else if (!PDFViewerApplication.pdfHistory?.popStateInProgress) {\n PDFViewerApplication.pdfLinkService.setHash(hash);\n }\n}\n\nif (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n // eslint-disable-next-line no-var\n var webViewerFileInputChange = function (evt) {\n if (PDFViewerApplication.pdfViewer?.isInPresentationMode) {\n return; // Opening a new PDF file isn't supported in Presentation Mode.\n }\n const file = evt.fileInput.files[0];\n\n PDFViewerApplication.open({\n url: URL.createObjectURL(file),\n originalUrl: file.name,\n });\n };\n\n // eslint-disable-next-line no-var\n var webViewerOpenFile = function (evt) {\n PDFViewerApplication._openFileInput?.click();\n };\n}\n\nfunction webViewerPresentationMode() {\n PDFViewerApplication.requestPresentationMode();\n}\nfunction webViewerSwitchAnnotationEditorMode(evt) {\n PDFViewerApplication.pdfViewer.annotationEditorMode = evt;\n}\nfunction webViewerSwitchAnnotationEditorParams(evt) {\n PDFViewerApplication.pdfViewer.annotationEditorParams = evt;\n}\nfunction webViewerPrint() {\n PDFViewerApplication.triggerPrinting();\n}\nfunction webViewerDownload() {\n PDFViewerApplication.downloadOrSave();\n}\nfunction webViewerFirstPage() {\n PDFViewerApplication.page = 1;\n}\nfunction webViewerLastPage() {\n PDFViewerApplication.page = PDFViewerApplication.pagesCount;\n}\nfunction webViewerNextPage() {\n PDFViewerApplication.pdfViewer.nextPage();\n}\nfunction webViewerPreviousPage() {\n PDFViewerApplication.pdfViewer.previousPage();\n}\nfunction webViewerZoomIn() {\n PDFViewerApplication.zoomIn();\n}\nfunction webViewerZoomOut() {\n PDFViewerApplication.zoomOut();\n}\nfunction webViewerZoomReset() {\n PDFViewerApplication.zoomReset();\n}\nfunction webViewerPageNumberChanged(evt) {\n const pdfViewer = PDFViewerApplication.pdfViewer;\n // Note that for `<input type=\"number\">` HTML elements, an empty string will\n // be returned for non-number inputs; hence we simply do nothing in that case.\n if (evt.value !== \"\") {\n PDFViewerApplication.pdfLinkService.goToPage(evt.value);\n }\n\n // Ensure that the page number input displays the correct value, even if the\n // value entered by the user was invalid (e.g. a floating point number).\n if (\n evt.value !== pdfViewer.currentPageNumber.toString() &&\n evt.value !== pdfViewer.currentPageLabel\n ) {\n PDFViewerApplication.toolbar?.setPageNumber(\n pdfViewer.currentPageNumber,\n pdfViewer.currentPageLabel\n );\n }\n}\nfunction webViewerScaleChanged(evt) {\n PDFViewerApplication.pdfViewer.currentScaleValue = evt.value;\n}\nfunction webViewerRotateCw() {\n PDFViewerApplication.rotatePages(90);\n}\nfunction webViewerRotateCcw() {\n PDFViewerApplication.rotatePages(-90);\n}\nfunction webViewerOptionalContentConfig(evt) {\n PDFViewerApplication.pdfViewer.optionalContentConfigPromise = evt.promise;\n}\nfunction webViewerSwitchScrollMode(evt) {\n PDFViewerApplication.pdfViewer.scrollMode = evt.mode;\n}\nfunction webViewerSwitchSpreadMode(evt) {\n PDFViewerApplication.pdfViewer.spreadMode = evt.mode;\n}\nfunction webViewerDocumentProperties() {\n PDFViewerApplication.pdfDocumentProperties?.open();\n}\n\nfunction webViewerFindFromUrlHash(evt) {\n PDFViewerApplication.eventBus.dispatch(\"find\", {\n source: evt.source,\n type: \"\",\n query: evt.query,\n caseSensitive: false,\n entireWord: false,\n highlightAll: true,\n findPrevious: false,\n matchDiacritics: true,\n });\n}\n\nfunction webViewerUpdateFindMatchesCount({ matchesCount }) {\n if (PDFViewerApplication.supportsIntegratedFind) {\n PDFViewerApplication.externalServices.updateFindMatchesCount(matchesCount);\n } else {\n PDFViewerApplication.findBar?.updateResultsCount(matchesCount);\n }\n}\n\nfunction webViewerUpdateFindControlState({\n state,\n previous,\n matchesCount,\n rawQuery,\n}) {\n if (PDFViewerApplication.supportsIntegratedFind) {\n PDFViewerApplication.externalServices.updateFindControlState({\n result: state,\n findPrevious: previous,\n matchesCount,\n rawQuery,\n });\n } else {\n PDFViewerApplication.findBar?.updateUIState(state, previous, matchesCount);\n }\n}\n\nfunction webViewerScaleChanging(evt) {\n PDFViewerApplication.toolbar?.setPageScale(evt.presetValue, evt.scale);\n\n PDFViewerApplication.pdfViewer.update();\n}\n\nfunction webViewerRotationChanging(evt) {\n if (PDFViewerApplication.pdfThumbnailViewer) {\n PDFViewerApplication.pdfThumbnailViewer.pagesRotation = evt.pagesRotation;\n }\n\n PDFViewerApplication.forceRendering();\n // Ensure that the active page doesn't change during rotation.\n PDFViewerApplication.pdfViewer.currentPageNumber = evt.pageNumber;\n}\n\nfunction webViewerPageChanging({ pageNumber, pageLabel }) {\n PDFViewerApplication.toolbar?.setPageNumber(pageNumber, pageLabel);\n PDFViewerApplication.secondaryToolbar?.setPageNumber(pageNumber);\n\n if (PDFViewerApplication.pdfSidebar?.visibleView === SidebarView.THUMBS) {\n PDFViewerApplication.pdfThumbnailViewer?.scrollThumbnailIntoView(\n pageNumber\n );\n }\n\n // Show/hide the loading indicator in the page number input element.\n const currentPage = PDFViewerApplication.pdfViewer.getPageView(\n /* index = */ pageNumber - 1\n );\n PDFViewerApplication.toolbar?.updateLoadingIndicatorState(\n currentPage?.renderingState === RenderingStates.RUNNING\n );\n}\n\nfunction webViewerResolutionChange(evt) {\n PDFViewerApplication.pdfViewer.refresh();\n}\n\nfunction webViewerVisibilityChange(evt) {\n if (document.visibilityState === \"visible\") {\n // Ignore mouse wheel zooming during tab switches (bug 1503412).\n setZoomDisabledTimeout();\n }\n}\n\nlet zoomDisabledTimeout = null;\nfunction setZoomDisabledTimeout() {\n if (zoomDisabledTimeout) {\n clearTimeout(zoomDisabledTimeout);\n }\n zoomDisabledTimeout = setTimeout(function () {\n zoomDisabledTimeout = null;\n }, WHEEL_ZOOM_DISABLED_TIMEOUT);\n}\n\nfunction webViewerWheel(evt) {\n const {\n pdfViewer,\n supportsMouseWheelZoomCtrlKey,\n supportsMouseWheelZoomMetaKey,\n supportsPinchToZoom,\n } = PDFViewerApplication;\n\n if (pdfViewer.isInPresentationMode) {\n return;\n }\n\n // Pinch-to-zoom on a trackpad maps to a wheel event with ctrlKey set to true\n // https://developer.mozilla.org/en-US/docs/Web/API/WheelEvent#browser_compatibility\n // Hence if ctrlKey is true but ctrl key hasn't been pressed then we can\n // infer that we have a pinch-to-zoom.\n // But the ctrlKey could have been pressed outside of the browser window,\n // hence we try to do some magic to guess if the scaleFactor is likely coming\n // from a pinch-to-zoom or not.\n\n // It is important that we query deltaMode before delta{X,Y}, so that\n // Firefox doesn't switch to DOM_DELTA_PIXEL mode for compat with other\n // browsers, see https://bugzilla.mozilla.org/show_bug.cgi?id=1392460.\n const deltaMode = evt.deltaMode;\n\n // The following formula is a bit strange but it comes from:\n // https://searchfox.org/mozilla-central/rev/d62c4c4d5547064487006a1506287da394b64724/widget/InputData.cpp#618-626\n let scaleFactor = Math.exp(-evt.deltaY / 100);\n\n const isBuiltInMac =\n typeof PDFJSDev !== \"undefined\" &&\n PDFJSDev.test(\"MOZCENTRAL\") &&\n FeatureTest.platform.isMac;\n const isPinchToZoom =\n evt.ctrlKey &&\n !PDFViewerApplication._isCtrlKeyDown &&\n deltaMode === WheelEvent.DOM_DELTA_PIXEL &&\n evt.deltaX === 0 &&\n (Math.abs(scaleFactor - 1) < 0.05 || isBuiltInMac) &&\n evt.deltaZ === 0;\n\n if (\n isPinchToZoom ||\n (evt.ctrlKey && supportsMouseWheelZoomCtrlKey) ||\n (evt.metaKey && supportsMouseWheelZoomMetaKey)\n ) {\n // Only zoom the pages, not the entire viewer.\n evt.preventDefault();\n // NOTE: this check must be placed *after* preventDefault.\n if (\n PDFViewerApplication._isScrolling ||\n zoomDisabledTimeout ||\n document.visibilityState === \"hidden\" ||\n PDFViewerApplication.overlayManager.active\n ) {\n return;\n }\n\n const previousScale = pdfViewer.currentScale;\n if (isPinchToZoom && supportsPinchToZoom) {\n scaleFactor = PDFViewerApplication._accumulateFactor(\n previousScale,\n scaleFactor,\n \"_wheelUnusedFactor\"\n );\n if (scaleFactor < 1) {\n PDFViewerApplication.zoomOut(null, scaleFactor);\n } else if (scaleFactor > 1) {\n PDFViewerApplication.zoomIn(null, scaleFactor);\n } else {\n return;\n }\n } else {\n const delta = normalizeWheelEventDirection(evt);\n\n let ticks = 0;\n if (\n deltaMode === WheelEvent.DOM_DELTA_LINE ||\n deltaMode === WheelEvent.DOM_DELTA_PAGE\n ) {\n // For line-based devices, use one tick per event, because different\n // OSs have different defaults for the number lines. But we generally\n // want one \"clicky\" roll of the wheel (which produces one event) to\n // adjust the zoom by one step.\n if (Math.abs(delta) >= 1) {\n ticks = Math.sign(delta);\n } else {\n // If we're getting fractional lines (I can't think of a scenario\n // this might actually happen), be safe and use the accumulator.\n ticks = PDFViewerApplication._accumulateTicks(\n delta,\n \"_wheelUnusedTicks\"\n );\n }\n } else {\n // pixel-based devices\n const PIXELS_PER_LINE_SCALE = 30;\n ticks = PDFViewerApplication._accumulateTicks(\n delta / PIXELS_PER_LINE_SCALE,\n \"_wheelUnusedTicks\"\n );\n }\n\n if (ticks < 0) {\n PDFViewerApplication.zoomOut(-ticks);\n } else if (ticks > 0) {\n PDFViewerApplication.zoomIn(ticks);\n } else {\n return;\n }\n }\n\n // After scaling the page via zoomIn/zoomOut, the position of the upper-\n // left corner is restored. When the mouse wheel is used, the position\n // under the cursor should be restored instead.\n PDFViewerApplication._centerAtPos(previousScale, evt.clientX, evt.clientY);\n }\n}\n\nfunction webViewerTouchStart(evt) {\n if (\n PDFViewerApplication.pdfViewer.isInPresentationMode ||\n evt.touches.length < 2\n ) {\n return;\n }\n evt.preventDefault();\n\n if (evt.touches.length !== 2 || PDFViewerApplication.overlayManager.active) {\n PDFViewerApplication._touchInfo = null;\n return;\n }\n\n let [touch0, touch1] = evt.touches;\n if (touch0.identifier > touch1.identifier) {\n [touch0, touch1] = [touch1, touch0];\n }\n PDFViewerApplication._touchInfo = {\n touch0X: touch0.pageX,\n touch0Y: touch0.pageY,\n touch1X: touch1.pageX,\n touch1Y: touch1.pageY,\n };\n}\n\nfunction webViewerTouchMove(evt) {\n if (!PDFViewerApplication._touchInfo || evt.touches.length !== 2) {\n return;\n }\n\n const { pdfViewer, _touchInfo, supportsPinchToZoom } = PDFViewerApplication;\n let [touch0, touch1] = evt.touches;\n if (touch0.identifier > touch1.identifier) {\n [touch0, touch1] = [touch1, touch0];\n }\n const { pageX: page0X, pageY: page0Y } = touch0;\n const { pageX: page1X, pageY: page1Y } = touch1;\n const {\n touch0X: pTouch0X,\n touch0Y: pTouch0Y,\n touch1X: pTouch1X,\n touch1Y: pTouch1Y,\n } = _touchInfo;\n\n if (\n Math.abs(pTouch0X - page0X) <= 1 &&\n Math.abs(pTouch0Y - page0Y) <= 1 &&\n Math.abs(pTouch1X - page1X) <= 1 &&\n Math.abs(pTouch1Y - page1Y) <= 1\n ) {\n // Touches are really too close and it's hard do some basic\n // geometry in order to guess something.\n return;\n }\n\n _touchInfo.touch0X = page0X;\n _touchInfo.touch0Y = page0Y;\n _touchInfo.touch1X = page1X;\n _touchInfo.touch1Y = page1Y;\n\n if (pTouch0X === page0X && pTouch0Y === page0Y) {\n // First touch is fixed, if the vectors are collinear then we've a pinch.\n const v1X = pTouch1X - page0X;\n const v1Y = pTouch1Y - page0Y;\n const v2X = page1X - page0X;\n const v2Y = page1Y - page0Y;\n const det = v1X * v2Y - v1Y * v2X;\n // 0.02 is approximatively sin(0.15deg).\n if (Math.abs(det) > 0.02 * Math.hypot(v1X, v1Y) * Math.hypot(v2X, v2Y)) {\n return;\n }\n } else if (pTouch1X === page1X && pTouch1Y === page1Y) {\n // Second touch is fixed, if the vectors are collinear then we've a pinch.\n const v1X = pTouch0X - page1X;\n const v1Y = pTouch0Y - page1Y;\n const v2X = page0X - page1X;\n const v2Y = page0Y - page1Y;\n const det = v1X * v2Y - v1Y * v2X;\n if (Math.abs(det) > 0.02 * Math.hypot(v1X, v1Y) * Math.hypot(v2X, v2Y)) {\n return;\n }\n } else {\n const diff0X = page0X - pTouch0X;\n const diff1X = page1X - pTouch1X;\n const diff0Y = page0Y - pTouch0Y;\n const diff1Y = page1Y - pTouch1Y;\n const dotProduct = diff0X * diff1X + diff0Y * diff1Y;\n if (dotProduct >= 0) {\n // The two touches go in almost the same direction.\n return;\n }\n }\n\n evt.preventDefault();\n\n const distance = Math.hypot(page0X - page1X, page0Y - page1Y) || 1;\n const pDistance = Math.hypot(pTouch0X - pTouch1X, pTouch0Y - pTouch1Y) || 1;\n const previousScale = pdfViewer.currentScale;\n if (supportsPinchToZoom) {\n const newScaleFactor = PDFViewerApplication._accumulateFactor(\n previousScale,\n distance / pDistance,\n \"_touchUnusedFactor\"\n );\n if (newScaleFactor < 1) {\n PDFViewerApplication.zoomOut(null, newScaleFactor);\n } else if (newScaleFactor > 1) {\n PDFViewerApplication.zoomIn(null, newScaleFactor);\n } else {\n return;\n }\n } else {\n const PIXELS_PER_LINE_SCALE = 30;\n const ticks = PDFViewerApplication._accumulateTicks(\n (distance - pDistance) / PIXELS_PER_LINE_SCALE,\n \"_touchUnusedTicks\"\n );\n if (ticks < 0) {\n PDFViewerApplication.zoomOut(-ticks);\n } else if (ticks > 0) {\n PDFViewerApplication.zoomIn(ticks);\n } else {\n return;\n }\n }\n\n PDFViewerApplication._centerAtPos(\n previousScale,\n (page0X + page1X) / 2,\n (page0Y + page1Y) / 2\n );\n}\n\nfunction webViewerTouchEnd(evt) {\n if (!PDFViewerApplication._touchInfo) {\n return;\n }\n\n evt.preventDefault();\n PDFViewerApplication._touchInfo = null;\n PDFViewerApplication._touchUnusedTicks = 0;\n PDFViewerApplication._touchUnusedFactor = 1;\n}\n\nfunction webViewerClick(evt) {\n if (!PDFViewerApplication.secondaryToolbar?.isOpen) {\n return;\n }\n const appConfig = PDFViewerApplication.appConfig;\n if (\n PDFViewerApplication.pdfViewer.containsElement(evt.target) ||\n (appConfig.toolbar?.container.contains(evt.target) &&\n evt.target !== appConfig.secondaryToolbar?.toggleButton)\n ) {\n PDFViewerApplication.secondaryToolbar.close();\n }\n}\n\nfunction webViewerKeyUp(evt) {\n // evt.ctrlKey is false hence we use evt.key.\n if (evt.key === \"Control\") {\n PDFViewerApplication._isCtrlKeyDown = false;\n }\n}\n\nfunction webViewerKeyDown(evt) {\n PDFViewerApplication._isCtrlKeyDown = evt.key === \"Control\";\n\n if (PDFViewerApplication.overlayManager.active) {\n return;\n }\n const { eventBus, pdfViewer } = PDFViewerApplication;\n const isViewerInPresentationMode = pdfViewer.isInPresentationMode;\n\n let handled = false,\n ensureViewerFocused = false;\n const cmd =\n (evt.ctrlKey ? 1 : 0) |\n (evt.altKey ? 2 : 0) |\n (evt.shiftKey ? 4 : 0) |\n (evt.metaKey ? 8 : 0);\n\n // First, handle the key bindings that are independent whether an input\n // control is selected or not.\n if (cmd === 1 || cmd === 8 || cmd === 5 || cmd === 12) {\n // either CTRL or META key with optional SHIFT.\n switch (evt.keyCode) {\n case 70: // f\n if (!PDFViewerApplication.supportsIntegratedFind && !evt.shiftKey) {\n PDFViewerApplication.findBar?.open();\n handled = true;\n }\n break;\n case 71: // g\n if (!PDFViewerApplication.supportsIntegratedFind) {\n const { state } = PDFViewerApplication.findController;\n if (state) {\n const newState = {\n source: window,\n type: \"again\",\n findPrevious: cmd === 5 || cmd === 12,\n };\n eventBus.dispatch(\"find\", { ...state, ...newState });\n }\n handled = true;\n }\n break;\n case 61: // FF/Mac '='\n case 107: // FF '+' and '='\n case 187: // Chrome '+'\n case 171: // FF with German keyboard\n PDFViewerApplication.zoomIn();\n handled = true;\n break;\n case 173: // FF/Mac '-'\n case 109: // FF '-'\n case 189: // Chrome '-'\n PDFViewerApplication.zoomOut();\n handled = true;\n break;\n case 48: // '0'\n case 96: // '0' on Numpad of Swedish keyboard\n if (!isViewerInPresentationMode) {\n // keeping it unhandled (to restore page zoom to 100%)\n setTimeout(function () {\n // ... and resetting the scale after browser adjusts its scale\n PDFViewerApplication.zoomReset();\n });\n handled = false;\n }\n break;\n\n case 38: // up arrow\n if (isViewerInPresentationMode || PDFViewerApplication.page > 1) {\n PDFViewerApplication.page = 1;\n handled = true;\n ensureViewerFocused = true;\n }\n break;\n case 40: // down arrow\n if (\n isViewerInPresentationMode ||\n PDFViewerApplication.page < PDFViewerApplication.pagesCount\n ) {\n PDFViewerApplication.page = PDFViewerApplication.pagesCount;\n handled = true;\n ensureViewerFocused = true;\n }\n break;\n }\n }\n\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC || CHROME\")) {\n // CTRL or META without shift\n if (cmd === 1 || cmd === 8) {\n switch (evt.keyCode) {\n case 83: // s\n eventBus.dispatch(\"download\", { source: window });\n handled = true;\n break;\n\n case 79: // o\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n eventBus.dispatch(\"openfile\", { source: window });\n handled = true;\n }\n break;\n }\n }\n }\n\n // CTRL+ALT or Option+Command\n if (cmd === 3 || cmd === 10) {\n switch (evt.keyCode) {\n case 80: // p\n PDFViewerApplication.requestPresentationMode();\n handled = true;\n PDFViewerApplication.externalServices.reportTelemetry({\n type: \"buttons\",\n data: { id: \"presentationModeKeyboard\" },\n });\n break;\n case 71: // g\n // focuses input#pageNumber field\n if (PDFViewerApplication.appConfig.toolbar) {\n PDFViewerApplication.appConfig.toolbar.pageNumber.select();\n handled = true;\n }\n break;\n }\n }\n\n if (handled) {\n if (ensureViewerFocused && !isViewerInPresentationMode) {\n pdfViewer.focus();\n }\n evt.preventDefault();\n return;\n }\n\n // Some shortcuts should not get handled if a control/input element\n // is selected.\n const curElement = getActiveOrFocusedElement();\n const curElementTagName = curElement?.tagName.toUpperCase();\n if (\n curElementTagName === \"INPUT\" ||\n curElementTagName === \"TEXTAREA\" ||\n curElementTagName === \"SELECT\" ||\n (curElementTagName === \"BUTTON\" &&\n (evt.keyCode === /* Enter = */ 13 || evt.keyCode === /* Space = */ 32)) ||\n curElement?.isContentEditable\n ) {\n // Make sure that the secondary toolbar is closed when Escape is pressed.\n if (evt.keyCode !== /* Esc = */ 27) {\n return;\n }\n }\n\n // No control key pressed at all.\n if (cmd === 0) {\n let turnPage = 0,\n turnOnlyIfPageFit = false;\n switch (evt.keyCode) {\n case 38: // up arrow\n if (PDFViewerApplication.supportsCaretBrowsingMode) {\n PDFViewerApplication.moveCaret(\n /* isUp = */ true,\n /* select = */ false\n );\n handled = true;\n break;\n }\n /* falls through */\n case 33: // pg up\n // vertical scrolling using arrow/pg keys\n if (pdfViewer.isVerticalScrollbarEnabled) {\n turnOnlyIfPageFit = true;\n }\n turnPage = -1;\n break;\n case 8: // backspace\n if (!isViewerInPresentationMode) {\n turnOnlyIfPageFit = true;\n }\n turnPage = -1;\n break;\n case 37: // left arrow\n if (PDFViewerApplication.supportsCaretBrowsingMode) {\n return;\n }\n // horizontal scrolling using arrow keys\n if (pdfViewer.isHorizontalScrollbarEnabled) {\n turnOnlyIfPageFit = true;\n }\n /* falls through */\n case 75: // 'k'\n case 80: // 'p'\n turnPage = -1;\n break;\n case 27: // esc key\n if (PDFViewerApplication.secondaryToolbar?.isOpen) {\n PDFViewerApplication.secondaryToolbar.close();\n handled = true;\n }\n if (\n !PDFViewerApplication.supportsIntegratedFind &&\n PDFViewerApplication.findBar?.opened\n ) {\n PDFViewerApplication.findBar.close();\n handled = true;\n }\n break;\n case 40: // down arrow\n if (PDFViewerApplication.supportsCaretBrowsingMode) {\n PDFViewerApplication.moveCaret(\n /* isUp = */ false,\n /* select = */ false\n );\n handled = true;\n break;\n }\n /* falls through */\n case 34: // pg down\n // vertical scrolling using arrow/pg keys\n if (pdfViewer.isVerticalScrollbarEnabled) {\n turnOnlyIfPageFit = true;\n }\n turnPage = 1;\n break;\n case 13: // enter key\n case 32: // spacebar\n if (!isViewerInPresentationMode) {\n turnOnlyIfPageFit = true;\n }\n turnPage = 1;\n break;\n case 39: // right arrow\n if (PDFViewerApplication.supportsCaretBrowsingMode) {\n return;\n }\n // horizontal scrolling using arrow keys\n if (pdfViewer.isHorizontalScrollbarEnabled) {\n turnOnlyIfPageFit = true;\n }\n /* falls through */\n case 74: // 'j'\n case 78: // 'n'\n turnPage = 1;\n break;\n\n case 36: // home\n if (isViewerInPresentationMode || PDFViewerApplication.page > 1) {\n PDFViewerApplication.page = 1;\n handled = true;\n ensureViewerFocused = true;\n }\n break;\n case 35: // end\n if (\n isViewerInPresentationMode ||\n PDFViewerApplication.page < PDFViewerApplication.pagesCount\n ) {\n PDFViewerApplication.page = PDFViewerApplication.pagesCount;\n handled = true;\n ensureViewerFocused = true;\n }\n break;\n\n case 83: // 's'\n PDFViewerApplication.pdfCursorTools?.switchTool(CursorTool.SELECT);\n break;\n case 72: // 'h'\n PDFViewerApplication.pdfCursorTools?.switchTool(CursorTool.HAND);\n break;\n\n case 82: // 'r'\n PDFViewerApplication.rotatePages(90);\n break;\n\n case 115: // F4\n PDFViewerApplication.pdfSidebar?.toggle();\n break;\n }\n\n if (\n turnPage !== 0 &&\n (!turnOnlyIfPageFit || pdfViewer.currentScaleValue === \"page-fit\")\n ) {\n if (turnPage > 0) {\n pdfViewer.nextPage();\n } else {\n pdfViewer.previousPage();\n }\n handled = true;\n }\n }\n\n // shift-key\n if (cmd === 4) {\n switch (evt.keyCode) {\n case 13: // enter key\n case 32: // spacebar\n if (\n !isViewerInPresentationMode &&\n pdfViewer.currentScaleValue !== \"page-fit\"\n ) {\n break;\n }\n pdfViewer.previousPage();\n\n handled = true;\n break;\n\n case 38: // up arrow\n PDFViewerApplication.moveCaret(/* isUp = */ true, /* select = */ true);\n handled = true;\n break;\n case 40: // down arrow\n PDFViewerApplication.moveCaret(/* isUp = */ false, /* select = */ true);\n handled = true;\n break;\n case 82: // 'r'\n PDFViewerApplication.rotatePages(-90);\n break;\n }\n }\n\n if (!handled && !isViewerInPresentationMode) {\n // 33=Page Up 34=Page Down 35=End 36=Home\n // 37=Left 38=Up 39=Right 40=Down\n // 32=Spacebar\n if (\n (evt.keyCode >= 33 && evt.keyCode <= 40) ||\n (evt.keyCode === 32 && curElementTagName !== \"BUTTON\")\n ) {\n ensureViewerFocused = true;\n }\n }\n\n if (ensureViewerFocused && !pdfViewer.containsElement(curElement)) {\n // The page container is not focused, but a page navigation key has been\n // pressed. Change the focus to the viewer container to make sure that\n // navigation by keyboard works as expected.\n pdfViewer.focus();\n }\n\n if (handled) {\n evt.preventDefault();\n }\n}\n\nfunction beforeUnload(evt) {\n evt.preventDefault();\n evt.returnValue = \"\";\n return false;\n}\n\nfunction webViewerAnnotationEditorStatesChanged(data) {\n PDFViewerApplication.externalServices.updateEditorStates(data);\n}\n\nfunction webViewerReportTelemetry({ details }) {\n PDFViewerApplication.externalServices.reportTelemetry(details);\n}\n\nexport { PDFViewerApplication };\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\nimport { RenderingStates, ScrollMode, SpreadMode } from \"./ui_utils.js\";\nimport { AppOptions } from \"./app_options.js\";\nimport { LinkTarget } from \"./pdf_link_service.js\";\nimport { PDFViewerApplication } from \"./app.js\";\n\n/* eslint-disable-next-line no-unused-vars */\nconst pdfjsVersion =\n typeof PDFJSDev !== \"undefined\" ? PDFJSDev.eval(\"BUNDLE_VERSION\") : void 0;\n/* eslint-disable-next-line no-unused-vars */\nconst pdfjsBuild =\n typeof PDFJSDev !== \"undefined\" ? PDFJSDev.eval(\"BUNDLE_BUILD\") : void 0;\n\nconst AppConstants =\n typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")\n ? { LinkTarget, RenderingStates, ScrollMode, SpreadMode }\n : null;\n\nwindow.PDFViewerApplication = PDFViewerApplication;\nwindow.PDFViewerApplicationConstants = AppConstants;\nwindow.PDFViewerApplicationOptions = AppOptions;\n\nfunction getViewerConfiguration() {\n return {\n appContainer: document.body,\n mainContainer: document.getElementById(\"viewerContainer\"),\n viewerContainer: document.getElementById(\"viewer\"),\n toolbar: {\n container: document.getElementById(\"toolbarViewer\"),\n numPages: document.getElementById(\"numPages\"),\n pageNumber: document.getElementById(\"pageNumber\"),\n scaleSelect: document.getElementById(\"scaleSelect\"),\n customScaleOption: document.getElementById(\"customScaleOption\"),\n previous: document.getElementById(\"previous\"),\n next: document.getElementById(\"next\"),\n zoomIn: document.getElementById(\"zoomIn\"),\n zoomOut: document.getElementById(\"zoomOut\"),\n viewFind: document.getElementById(\"viewFind\"),\n print: document.getElementById(\"print\"),\n editorFreeTextButton: document.getElementById(\"editorFreeText\"),\n editorFreeTextParamsToolbar: document.getElementById(\n \"editorFreeTextParamsToolbar\"\n ),\n editorHighlightButton: document.getElementById(\"editorHighlight\"),\n editorHighlightParamsToolbar: document.getElementById(\n \"editorHighlightParamsToolbar\"\n ),\n editorHighlightColorPicker: document.getElementById(\n \"editorHighlightColorPicker\"\n ),\n editorInkButton: document.getElementById(\"editorInk\"),\n editorInkParamsToolbar: document.getElementById(\"editorInkParamsToolbar\"),\n editorStampButton: document.getElementById(\"editorStamp\"),\n editorStampParamsToolbar: document.getElementById(\n \"editorStampParamsToolbar\"\n ),\n download: document.getElementById(\"download\"),\n },\n secondaryToolbar: {\n toolbar: document.getElementById(\"secondaryToolbar\"),\n toggleButton: document.getElementById(\"secondaryToolbarToggle\"),\n presentationModeButton: document.getElementById(\"presentationMode\"),\n openFileButton:\n typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")\n ? document.getElementById(\"secondaryOpenFile\")\n : null,\n printButton: document.getElementById(\"secondaryPrint\"),\n downloadButton: document.getElementById(\"secondaryDownload\"),\n viewBookmarkButton: document.getElementById(\"viewBookmark\"),\n firstPageButton: document.getElementById(\"firstPage\"),\n lastPageButton: document.getElementById(\"lastPage\"),\n pageRotateCwButton: document.getElementById(\"pageRotateCw\"),\n pageRotateCcwButton: document.getElementById(\"pageRotateCcw\"),\n cursorSelectToolButton: document.getElementById(\"cursorSelectTool\"),\n cursorHandToolButton: document.getElementById(\"cursorHandTool\"),\n scrollPageButton: document.getElementById(\"scrollPage\"),\n scrollVerticalButton: document.getElementById(\"scrollVertical\"),\n scrollHorizontalButton: document.getElementById(\"scrollHorizontal\"),\n scrollWrappedButton: document.getElementById(\"scrollWrapped\"),\n spreadNoneButton: document.getElementById(\"spreadNone\"),\n spreadOddButton: document.getElementById(\"spreadOdd\"),\n spreadEvenButton: document.getElementById(\"spreadEven\"),\n documentPropertiesButton: document.getElementById(\"documentProperties\"),\n },\n sidebar: {\n // Divs (and sidebar button)\n outerContainer: document.getElementById(\"outerContainer\"),\n sidebarContainer: document.getElementById(\"sidebarContainer\"),\n toggleButton: document.getElementById(\"sidebarToggle\"),\n resizer: document.getElementById(\"sidebarResizer\"),\n // Buttons\n thumbnailButton: document.getElementById(\"viewThumbnail\"),\n outlineButton: document.getElementById(\"viewOutline\"),\n attachmentsButton: document.getElementById(\"viewAttachments\"),\n layersButton: document.getElementById(\"viewLayers\"),\n // Views\n thumbnailView: document.getElementById(\"thumbnailView\"),\n outlineView: document.getElementById(\"outlineView\"),\n attachmentsView: document.getElementById(\"attachmentsView\"),\n layersView: document.getElementById(\"layersView\"),\n // View-specific options\n currentOutlineItemButton: document.getElementById(\"currentOutlineItem\"),\n },\n findBar: {\n bar: document.getElementById(\"findbar\"),\n toggleButton: document.getElementById(\"viewFind\"),\n findField: document.getElementById(\"findInput\"),\n highlightAllCheckbox: document.getElementById(\"findHighlightAll\"),\n caseSensitiveCheckbox: document.getElementById(\"findMatchCase\"),\n matchDiacriticsCheckbox: document.getElementById(\"findMatchDiacritics\"),\n entireWordCheckbox: document.getElementById(\"findEntireWord\"),\n findMsg: document.getElementById(\"findMsg\"),\n findResultsCount: document.getElementById(\"findResultsCount\"),\n findPreviousButton: document.getElementById(\"findPrevious\"),\n findNextButton: document.getElementById(\"findNext\"),\n },\n passwordOverlay: {\n dialog: document.getElementById(\"passwordDialog\"),\n label: document.getElementById(\"passwordText\"),\n input: document.getElementById(\"password\"),\n submitButton: document.getElementById(\"passwordSubmit\"),\n cancelButton: document.getElementById(\"passwordCancel\"),\n },\n documentProperties: {\n dialog: document.getElementById(\"documentPropertiesDialog\"),\n closeButton: document.getElementById(\"documentPropertiesClose\"),\n fields: {\n fileName: document.getElementById(\"fileNameField\"),\n fileSize: document.getElementById(\"fileSizeField\"),\n title: document.getElementById(\"titleField\"),\n author: document.getElementById(\"authorField\"),\n subject: document.getElementById(\"subjectField\"),\n keywords: document.getElementById(\"keywordsField\"),\n creationDate: document.getElementById(\"creationDateField\"),\n modificationDate: document.getElementById(\"modificationDateField\"),\n creator: document.getElementById(\"creatorField\"),\n producer: document.getElementById(\"producerField\"),\n version: document.getElementById(\"versionField\"),\n pageCount: document.getElementById(\"pageCountField\"),\n pageSize: document.getElementById(\"pageSizeField\"),\n linearized: document.getElementById(\"linearizedField\"),\n },\n },\n altTextDialog: {\n dialog: document.getElementById(\"altTextDialog\"),\n optionDescription: document.getElementById(\"descriptionButton\"),\n optionDecorative: document.getElementById(\"decorativeButton\"),\n textarea: document.getElementById(\"descriptionTextarea\"),\n cancelButton: document.getElementById(\"altTextCancel\"),\n saveButton: document.getElementById(\"altTextSave\"),\n },\n annotationEditorParams: {\n editorFreeTextFontSize: document.getElementById(\"editorFreeTextFontSize\"),\n editorFreeTextColor: document.getElementById(\"editorFreeTextColor\"),\n editorInkColor: document.getElementById(\"editorInkColor\"),\n editorInkThickness: document.getElementById(\"editorInkThickness\"),\n editorInkOpacity: document.getElementById(\"editorInkOpacity\"),\n editorStampAddImage: document.getElementById(\"editorStampAddImage\"),\n editorFreeHighlightThickness: document.getElementById(\n \"editorFreeHighlightThickness\"\n ),\n editorHighlightShowAll: document.getElementById(\"editorHighlightShowAll\"),\n },\n printContainer: document.getElementById(\"printContainer\"),\n };\n}\n\nfunction webViewerLoad() {\n const config = getViewerConfiguration();\n\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"GENERIC\")) {\n // Give custom implementations of the default viewer a simpler way to\n // set various `AppOptions`, by dispatching an event once all viewer\n // files are loaded but *before* the viewer initialization has run.\n const event = new CustomEvent(\"webviewerloaded\", {\n bubbles: true,\n cancelable: true,\n detail: {\n source: window,\n },\n });\n try {\n // Attempt to dispatch the event at the embedding `document`,\n // in order to support cases where the viewer is embedded in\n // a *dynamically* created <iframe> element.\n parent.document.dispatchEvent(event);\n } catch (ex) {\n // The viewer could be in e.g. a cross-origin <iframe> element,\n // fallback to dispatching the event at the current `document`.\n console.error(`webviewerloaded: ${ex}`);\n document.dispatchEvent(event);\n }\n }\n PDFViewerApplication.run(config);\n}\n\n// Block the \"load\" event until all pages are loaded, to ensure that printing\n// works in Firefox; see https://bugzilla.mozilla.org/show_bug.cgi?id=1618553\ndocument.blockUnblockOnload?.(true);\n\nif (\n document.readyState === \"interactive\" ||\n document.readyState === \"complete\"\n) {\n webViewerLoad();\n} else {\n document.addEventListener(\"DOMContentLoaded\", webViewerLoad, true);\n}\n\nexport {\n PDFViewerApplication,\n AppConstants as PDFViewerApplicationConstants,\n AppOptions as PDFViewerApplicationOptions,\n};\n"],"names":["DEFAULT_SCALE_VALUE","DEFAULT_SCALE","DEFAULT_SCALE_DELTA","MIN_SCALE","MAX_SCALE","UNKNOWN_SCALE","MAX_AUTO_SCALE","SCROLLBAR_PADDING","VERTICAL_PADDING","RenderingStates","INITIAL","RUNNING","PAUSED","FINISHED","PresentationModeState","UNKNOWN","NORMAL","CHANGING","FULLSCREEN","SidebarView","NONE","THUMBS","OUTLINE","ATTACHMENTS","LAYERS","TextLayerMode","DISABLE","ENABLE","ENABLE_PERMISSIONS","ScrollMode","VERTICAL","HORIZONTAL","WRAPPED","PAGE","SpreadMode","ODD","EVEN","CursorTool","SELECT","HAND","ZOOM","AutoPrintRegExp","OutputScale","constructor","pixelRatio","window","devicePixelRatio","sx","sy","scaled","scrollIntoView","element","spot","scrollMatches","parent","offsetParent","console","error","offsetY","offsetTop","clientTop","offsetX","offsetLeft","clientLeft","clientHeight","scrollHeight","clientWidth","scrollWidth","classList","contains","getComputedStyle","overflow","top","undefined","left","scrollLeft","scrollTop","watchScroll","viewAreaElement","callback","debounceScroll","evt","rAF","requestAnimationFrame","viewAreaElementScrolled","currentX","lastX","state","right","currentY","lastY","down","_eventHandler","addEventListener","parseQueryString","query","params","Map","key","value","URLSearchParams","set","toLowerCase","InvisibleCharsRegExp","removeNullCharacters","str","replaceInvisible","test","replaceAll","m","binarySearchFirstItem","items","condition","start","minIndex","maxIndex","length","currentIndex","currentItem","approximateFraction","x","Math","floor","xinv","limit","x_","a","b","c","d","p","q","result","roundToDivide","div","r","round","getPageSizeInches","view","userUnit","rotate","x1","y1","x2","y2","changeOrientation","width","height","backtrackBeforeAllVisibleElements","index","views","elt","pageTop","i","getVisibleElements","scrollEl","sortByVisibility","horizontal","rtl","bottom","isElementBottomAfterViewTop","elementBottom","isElementNextAfterViewHorizontally","elementLeft","elementRight","visible","ids","Set","numViews","firstVisibleElementInd","lastEdge","currentWidth","currentHeight","viewWidth","viewHeight","viewRight","viewBottom","hiddenHeight","max","hiddenWidth","fractionHeight","fractionWidth","percent","push","id","y","widthPercent","add","first","last","at","sort","pc","abs","normalizeWheelEventDirection","delta","hypot","deltaX","deltaY","angle","atan2","PI","normalizeWheelEventDelta","deltaMode","MOUSE_PIXELS_PER_LINE","MOUSE_LINES_PER_PAGE","WheelEvent","DOM_DELTA_PIXEL","DOM_DELTA_LINE","isValidRotation","Number","isInteger","isValidScrollMode","mode","Object","values","includes","isValidSpreadMode","isPortraitOrientation","size","animationStarted","Promise","resolve","docStyle","document","documentElement","style","clamp","v","min","ProgressBar","disableAutoFetchTimeout","bar","val","isNaN","remove","setProperty","setWidth","viewer","container","parentNode","scrollbarWidth","offsetWidth","setDisableAutoFetch","delay","clearTimeout","show","setTimeout","hide","getActiveOrFocusedElement","curRoot","curActiveOrFocused","activeElement","querySelector","shadowRoot","apiPageLayoutToViewerModes","layout","scrollMode","spreadMode","apiPageModeToSidebarView","toggleCheckedBtn","button","toggle","setAttribute","toggleExpandedBtn","compatibilityParams","create","userAgent","navigator","platform","maxTouchPoints","isAndroid","isIOS","checkCanvasSizeLimitation","maxCanvasPixels","OptionKind","BROWSER","VIEWER","API","WORKER","PREFERENCE","defaultOptions","canvasMaxAreaInBytes","kind","isInAutomation","supportsCaretBrowsingMode","supportsDocumentFonts","supportsIntegratedFind","supportsMouseWheelZoomCtrlKey","supportsMouseWheelZoomMetaKey","supportsPinchToZoom","annotationEditorMode","annotationMode","cursorToolOnLoad","debuggerSrc","defaultZoomDelay","defaultZoomValue","disableHistory","disablePageLabels","enableHighlightEditor","enableHighlightFloatingButton","enableML","enablePermissions","enablePrintAutoRotate","enableScripting","enableStampEditor","externalLinkRel","externalLinkTarget","highlightEditorColors","historyUpdateUrl","ignoreDestinationZoom","imageResourcesPath","forcePageColors","pageColorsBackground","pageColorsForeground","pdfBugEnabled","printResolution","sidebarViewOnLoad","scrollModeOnLoad","spreadModeOnLoad","textLayerMode","viewOnLoad","cMapPacked","cMapUrl","disableAutoFetch","disableFontFace","disableRange","disableStream","docBaseUrl","enableXfa","fontExtraProperties","isEvalSupported","isOffscreenCanvasSupported","maxImageSize","pdfBug","standardFontDataUrl","verbosity","workerPort","workerSrc","defaultUrl","sandboxBundleSrc","viewerCssTheme","disablePreferences","locale","language","userOptions","name","AppOptions","Error","get","getAll","defaultOnly","options","defaultOption","setAll","init","warn","DEFAULT_LINK_REL","LinkTarget","SELF","BLANK","PARENT","TOP","PDFLinkService","externalLinkEnabled","eventBus","_ignoreDestinationZoom","baseUrl","pdfDocument","pdfViewer","pdfHistory","setDocument","setViewer","setHistory","pagesCount","numPages","page","currentPageNumber","rotation","pagesRotation","isInPresentationMode","goToDestination","dest","namedDest","explicitDest","pageNumber","getDestination","Array","isArray","destRef","cachedPageNumber","getPageIndex","pushCurrentPosition","scrollPageIntoView","destArray","goToPage","pageLabelToPageNumber","pushPage","addLinkAttributes","link","url","newWindow","target","rel","href","title","onclick","targetStr","getDestinationHash","getAnchorUrl","escape","JSON","stringify","anchor","setHash","hash","has","phrase","dispatch","source","match","zoomArgs","split","zoomArg","zoomArgNumber","parseFloat","allowNegativeOffset","unescape","parse","toString","isValidExplicitDest","executeNamedAction","action","back","forward","nextPage","previousPage","executeSetOCGState","optionalContentConfig","optionalContentConfigPromise","setOCGState","#isValidExplicitDest","zoom","args","num","gen","allowNull","arg","SimpleLinkService","AbortException","AnnotationEditorLayer","AnnotationEditorParamsType","AnnotationEditorType","AnnotationEditorUIManager","AnnotationLayer","AnnotationMode","build","CMapCompressionType","ColorPicker","createValidAbsoluteUrl","DOMSVGFactory","DrawLayer","FeatureTest","fetchData","getDocument","getFilenameFromUrl","getPdfFilenameFromUrl","getXfaPageViewport","GlobalWorkerOptions","ImageKind","InvalidPDFException","isDataScheme","isPdfFile","MissingPDFException","noContextMenu","normalizeUnicode","OPS","Outliner","PasswordResponses","PDFDataRangeTransport","PDFDateString","PDFWorker","PermissionFlag","PixelsPerInch","RenderingCancelledException","renderTextLayer","setLayerDimensions","shadow","TextLayer","UnexpectedResponseException","updateTextLayer","Util","VerbosityLevel","version","XfaLayer","globalThis","pdfjsLib","WaitOnType","EVENT","TIMEOUT","waitOnEventOrTimeout","promise","withResolvers","ac","AbortController","handler","type","abort","timeout","evtMethod","EventBus","bind","signal","listeners","on","eventName","listener","_on","external","once","off","_off","data","eventListeners","externalListeners","slice","rmAbort","AbortSignal","aborted","onAbort","removeEventListener","ii","splice","AutomationEventBus","BaseExternalServices","updateFindControlState","updateFindMatchesCount","initPassiveLoading","reportTelemetry","createL10n","createScripting","updateEditorStates","getNimbusExperimentData","BasePreferences","browserDefaults","freeze","defaults","prefs","initializedPromise","_readFromStorage","then","browserPrefs","entries","prefVal","_writeToStorage","prefObj","updatePref","#updatePref","reset","oldPrefs","structuredClone","reason","defaultValue","valueType","defaultType","FluentType","valueOf","FluentNone","scope","FluentNumber","opts","nf","memoizeIntlObject","Intl","NumberFormat","format","err","reportError","FluentDateTime","dtf","DateTimeFormat","Date","toISOString","MAX_PLACEABLES","FSI","PDI","selector","category","PluralRules","select","getDefault","variants","star","resolvePattern","RangeError","getArguments","positional","named","resolveExpression","expr","minimumFractionDigits","precision","resolveVariableReference","resolveMessageReference","resolveTermReference","resolveFunctionReference","resolveSelectExpression","prototype","hasOwnProperty","call","ReferenceError","getTime","TypeError","attr","message","bundle","_messages","attribute","attributes","term","_terms","resolved","func","_functions","sel","variant","resolveComplexPattern","ptn","dirty","useIsolating","_useIsolating","elem","_transform","placeables","delete","join","Scope","errors","WeakSet","ctor","cache","_intls","locales","allowed","unwrapped","opt","NUMBER_ALLOWED","NUMBER","DATETIME_ALLOWED","DATETIME","getMemoizerForLocale","stringLocale","memoizer","FluentBundle","functions","transform","hasMessage","getMessage","addResource","res","allowOverrides","body","entry","startsWith","formatPattern","pattern","RE_MESSAGE_START","RE_ATTRIBUTE_START","RE_VARIANT_START","RE_NUMBER_LITERAL","RE_IDENTIFIER","RE_REFERENCE","RE_FUNCTION_NAME","RE_TEXT_RUN","RE_STRING_RUN","RE_STRING_ESCAPE","RE_UNICODE_ESCAPE","RE_LEADING_NEWLINES","RE_TRAILING_SPACES","RE_BLANK_LINES","RE_INDENT","TOKEN_BRACE_OPEN","TOKEN_BRACE_CLOSE","TOKEN_BRACKET_OPEN","TOKEN_BRACKET_CLOSE","TOKEN_PAREN_OPEN","TOKEN_ARROW","TOKEN_COLON","TOKEN_COMMA","TOKEN_BLANK","FluentResource","lastIndex","cursor","next","exec","parseMessage","SyntaxError","re","consumeChar","char","errorClass","consumeToken","match1","parsePattern","parseAttributes","keys","attrs","parsePatternElements","Infinity","indent","parseIndent","trim","elements","commonIndent","parsePlaceable","lastElement","baked","Indent","parseInlineExpression","parseVariants","sigil","parseArguments","parseLiteral","parseArgument","count","parseVariantKey","parseNumberLiteral","parseStringLiteral","fraction","parseEscapeSequence","codepoint4","codepoint6","codepoint","parseInt","String","fromCodePoint","makeIndent","text","replace","blank","reOverlay","TEXT_LEVEL_ELEMENTS","LOCALIZABLE_ATTRIBUTES","global","area","input","menuitem","menu","optgroup","option","track","img","textarea","th","description","label","textbox","translateElement","translation","localName","namespaceURI","textContent","templateElement","ownerDocument","createElementNS","innerHTML","overlayChildNodes","content","overlayAttributes","fromFragment","toElement","childNode","childNodes","nodeType","TEXT_NODE","hasAttribute","sanitized","getNodeForNamedElement","replaceChild","isElementAllowed","createSanitizedElement","createTextNodeFromTextContent","appendChild","fromElement","explicitlyAllowed","getAttribute","map","from","isAttrNameLocalizable","removeAttribute","sourceElement","translatedChild","childName","sourceChild","removeChild","clone","cloneNode","shallowPopulateUsing","createElement","createTextNode","attrName","elemName","CachedIterable","iterable","CachedSyncIterable","Symbol","iterator","cached","cur","touchNext","idx","done","CachedAsyncIterable","asyncIterator","default","Localization","resourceIds","generateBundles","onChange","addResourceIds","eager","removeResourceIds","filter","formatWithFallback","method","translations","hasAtLeastOneBundle","bundles","missingIds","keysFromBundle","formatMessages","messageFromBundle","formatValues","valueFromBundle","formatValue","handleEvent","formatted","attrNames","messageErrors","forEach","L10NID_ATTR_NAME","L10NARGS_ATTR_NAME","L10N_ELEMENT_QUERY","DOMLocalization","roots","pendingrAF","pendingElements","windowElement","mutationObserver","observerConfig","characterData","childList","subtree","attributeFilter","translateRoots","setAttributes","getAttributes","connectRoot","newRoot","root","defaultView","MutationObserver","mutations","translateMutations","observe","disconnectRoot","pauseObserving","clear","resumeObserving","all","translateFragment","takeRecords","disconnect","mutation","addedNode","addedNodes","ELEMENT_NODE","childElementCount","getTranslatables","translateElements","frag","getKeysForElement","applyTranslations","nodes","querySelectorAll","L10n","dir","lang","l10n","isRTL","fixupLangCode","_setL10n","getLanguage","getDirection","fallback","messages","translate","pause","resume","#fixupLangCode","langCode","PARTIAL_LANG_CODES","en","es","fy","ga","gu","hi","hy","nb","ne","nn","pa","pt","sv","zh","#isRTL","shortCode","GenericL10n","createBundle","resource","generateBundlesFallback","#generateBundles","defaultLang","baseLang","baseURL","paths","getPaths","langs","shortLang","createBundleFallback","#createBundle","path","URL","#getPaths","#generateBundlesFallback","#createBundleFallback","docProperties","info","metadata","contentDispositionFilename","contentLength","getMetadata","getDownloadInfo","filesize","filename","getRaw","authors","GenericScripting","_ready","reject","sandbox","pdfjsSandbox","QuickJSSandbox","catch","createSandbox","dispatchEventInSandbox","event","dispatchEvent","destroySandbox","nukeSandbox","initCom","app","Preferences","localStorage","setItem","getItem","ExternalServices","MLManager","guess","AltTextManager","boundUpdateUIState","updateUIState","boundSetPosition","setPosition","boundOnClick","onClick","currentEditor","cancelButton","dialog","hasUsedPointer","optionDescription","optionDecorative","overlayManager","saveButton","uiManager","previousAltText","svgElement","rectElement","telemetryData","close","preventDefault","finish","save","register","_elements","createSVGElement","#createSVGElement","svgFactory","svg","defs","append","mask","rect","editAltText","editor","altText","decorative","altTextData","checked","removeEditListeners","open","ex","#setPosition","containerX","containerY","containerW","containerH","getBoundingClientRect","innerWidth","windowW","innerHeight","windowH","dialogW","dialogH","getClientDimensions","MARGIN","isLTR","direction","xs","xe","ys","ye","#finish","active","#close","_reportTelemetry","alt_text_keyboard","removeOnClickListeners","addEditListeners","altTextFinish","#updateUIState","disabled","#save","alt_text_description","alt_text_edit","alt_text_decorative","#onClick","detail","#removeOnClickListeners","destroy","AnnotationEditorParams","bindListeners","#bindListeners","editorFreeTextFontSize","editorFreeTextColor","editorInkColor","editorInkThickness","editorInkOpacity","editorStampAddImage","editorFreeHighlightThickness","editorHighlightShowAll","typeStr","valueAsNumber","details","FREETEXT_SIZE","FREETEXT_COLOR","INK_COLOR","INK_THICKNESS","INK_OPACITY","HIGHLIGHT_THICKNESS","HIGHLIGHT_FREE","HIGHLIGHT_SHOW_ALL","PRECISION","CaretBrowsingMode","mainContainer","toolBarHeight","viewerContainer","toolbarContainer","isOnSameLine","#isOnSameLine","rect1","rect2","top1","bot1","mid1","top2","bot2","mid2","isUnderOver","#isUnderOver","isUp","midY","isVisible","#isVisible","getCaretPosition","#getCaretPosition","selection","focusNode","focusOffset","range","createRange","setStart","setEnd","caretPositionFromPoint","#caretPositionFromPoint","startContainer","offsetNode","startOffset","offset","caretRangeFromPoint","setCaretPositionHelper","#setCaretPositionHelper","caretX","extend","firstChild","lastChild","caretPosition","parentElement","elementsAtPoint","elementsFromPoint","savedVisibilities","el","visibility","setCaretPosition","#setCaretPosition","newLineElement","newLineElementRect","getNodeOnNextPage","#getNodeOnNextPage","textLayer","closest","walker","createTreeWalker","NodeFilter","SHOW_TEXT","node","moveCaret","getSelection","rangeCount","focusElement","Node","currentNode","focusRect","nodeIterator","previousSibling","nextSibling","lastNode","addRange","caretY","elementRect","download","blobUrl","click","DownloadManager","openBlobUrls","WeakMap","downloadUrl","_options","downloadData","contentType","createObjectURL","Blob","openOrDownloadData","isPdfData","viewerUrl","encodeURIComponent","revokeObjectURL","blob","OverlayManager","overlays","canForceClose","showModal","PasswordPrompt","activeCapability","updateCallback","isViewerEmbedded","submitButton","_isViewerEmbedded","verify","e","keyCode","cancel","passwordIncorrect","INCORRECT_PASSWORD","focus","#verify","password","invokeCallback","#cancel","#invokeCallback","setUpdateCallback","TREEITEM_OFFSET_TOP","TREEITEM_SELECTED_CLASS","BaseTreeViewer","_l10n","_pdfDocument","_lastToggleIsShow","_currentTreeItem","_dispatchEvent","_bindLink","_normalizeTextContent","_addToggleButton","hidden","toggler","className","stopPropagation","shiftKey","shouldShowAll","_toggleTreeItem","prepend","_toggleAllTreeItems","_finishRendering","fragment","hasAnyNesting","render","_updateCurrentTreeItem","treeItem","_scrollToCurrentTreeItem","firstElementChild","scrollTo","PDFAttachmentViewer","downloadManager","appendAttachment","keepRenderedCapability","_attachments","_renderedCapability","_pendingDispatchEvent","attachmentsCount","attachments","createDocumentFragment","item","#appendAttachment","renderedPromise","CSS_CLASS_GRAB","GrabToPan","activate","deactivate","_onMouseDown","onMouseDown","_onMouseMove","onMouseMove","_endPan","endPan","overlay","ignoreTarget","matches","#onMouseDown","originalTarget","tagName","scrollLeftStart","scrollTopStart","clientXStart","clientX","clientYStart","clientY","focusedElement","blur","#onMouseMove","buttons","xDiff","yDiff","behavior","#endPan","PDFCursorTools","prevActive","addEventListeners","switchTool","activeTool","tool","disableActiveTool","_handTool","#addEventListeners","presentationModeState","enableActive","disableActive","DEFAULT_FIELD_CONTENT","NON_METRIC_LOCALES","US_PAGE_NAMES","METRIC_PAGE_NAMES","getPageName","isPortrait","pageNames","PDFDocumentProperties","fieldData","fields","closeButton","fileNameLookup","_fileNameLookup","_currentPageNumber","_pagesRotation","_isNonMetricLocale","_dataAvailableCapability","updateUI","fileName","fileSize","creationDate","modificationDate","pageSize","isLinearized","parseFileSize","parseDate","CreationDate","ModDate","getPage","pdfPage","parsePageSize","parseLinearization","IsLinearized","Title","author","Author","subject","Subject","keywords","Keywords","creator","Creator","producer","Producer","PDFFormatVersion","pageCount","linearized","assign","#reset","#updateUI","#parseFileSize","kb","mb","size_mb","toPrecision","toLocaleString","size_kb","size_b","#parsePageSize","pageSizeInches","sizeInches","sizeMillimeters","rawName","exactMillimeters","intMillimeters","unit","orientation","#parseDate","inputDate","dateObject","toDateObject","date","toLocaleDateString","time","toLocaleTimeString","#parseLinearization","CharacterType","SPACE","ALPHA_LETTER","PUNCT","HAN_LETTER","KATAKANA_LETTER","HIRAGANA_LETTER","HALFWIDTH_KATAKANA_LETTER","THAI_LETTER","isAlphabeticalScript","charCode","isAscii","isAsciiAlpha","isAsciiDigit","isAsciiSpace","isHan","isKatakana","isHiragana","isHalfwidthKatakana","isThai","getCharacterType","NormalizeWithNFKC","getNormalizeWithNFKC","FindState","FOUND","NOT_FOUND","PENDING","FIND_TIMEOUT","MATCH_SCROLL_OFFSET_TOP","MATCH_SCROLL_OFFSET_LEFT","CHARACTERS_TO_NORMALIZE","DIACRITICS_EXCEPTION","DIACRITICS_EXCEPTION_STR","DIACRITICS_REG_EXP","SPECIAL_CHARS_REG_EXP","NOT_DIACRITIC_FROM_END_REG_EXP","NOT_DIACRITIC_FROM_START_REG_EXP","SYLLABLES_REG_EXP","SYLLABLES_LENGTHS","FIRST_CHAR_SYLLABLES_REG_EXP","NFKC_CHARS_TO_NORMALIZE","noSyllablesRegExp","withSyllablesRegExp","normalize","syllablePositions","len","normalizationRegex","toNormalizeWithNFKC","CJK","HKDiacritics","regexp","RegExp","rawDiacriticsPositions","normalized","positions","rawDiacriticsIndex","syllableIndex","shift","shiftOrigin","eol","hasDiacritics","p1","p2","p3","p4","p5","p6","p7","p8","replacement","jj","j","charAt","hasTrailingDashEOL","endsWith","newCharLen","getOriginalIndex","diffs","pos","end","oldStart","oldEnd","oldLen","PDFFindController","updateMatchesCountOnProgress","visitedPagesCount","linkService","_linkService","_eventBus","onIsPageVisible","onFind","onFindBarClose","highlightMatches","_highlightMatches","pageMatches","_pageMatches","pageMatchesLength","_pageMatchesLength","selected","_selected","_firstPageCapability","#onFind","shouldDirtyMatch","_dirtyMatch","extractText","findbarClosed","pendingTimeout","_findTimeout","nextMatch","highlightAll","updateAllPages","scrollMatchIntoView","selectedLeft","pageIndex","matchIndex","_scrollMatches","matchIdx","pageIdx","_offset","wrapped","_extractTextPromises","_pageContents","_pageDiffs","_hasDiacritics","_matchesCountTotal","_pagesToSearch","_pendingFindMatches","_resumePageIdx","#query","_rawQuery","_normalizedQuery","#shouldDirtyMatch","newQuery","prevQuery","newType","prevType","isEntireWord","#isEntireWord","startIdx","charCodeAt","calculateRegExpMatch","#calculateRegExpMatch","entireWord","pageContent","matchesLength","matchPos","matchLen","convertToRegExpString","#convertToRegExpString","matchDiacritics","isUnicode","trailingSpaces","fromCharCode","calculateMatch","#calculateMatch","caseSensitive","reverse","isUnicodePart","queryPart","flags","updatePage","nextPageMatch","pageMatchesCount","updateUIResultsCount","#extractText","deferred","textOptions","disableNormalization","getTextContent","strBuf","textItem","hasEOL","#updatePage","#updateAllPages","#nextMatch","previous","findPrevious","currentPageIndex","numPageMatches","updateMatch","advanceOffsetPage","matchesReady","#matchesReady","numMatches","#nextPageMatch","#advanceOffsetPage","#updateMatch","found","#onFindBarClose","requestMatchesCount","#requestMatchesCount","current","total","#updateUIResultsCount","matchesCount","rawQuery","MATCHES_COUNT_LIMIT","PDFFindBar","resizeObserver","ResizeObserver","resizeObserverCallback","opened","toggleButton","findField","highlightAllCheckbox","caseSensitiveCheckbox","matchDiacriticsCheckbox","entireWordCheckbox","findMsg","findResultsCount","findPreviousButton","findNextButton","findPrev","findMsgId","status","updateResultsCount","#resizeObserverCallback","findbarHeight","inputContainerHeight","HASH_CHANGE_TIMEOUT","POSITION_UPDATED_THRESHOLD","UPDATE_VIEWAREA_TIMEOUT","getCurrentHash","location","PDFHistory","eventAbortController","_initialized","_fingerprint","_isPagesLoaded","initialize","fingerprint","resetHistory","updateUrl","reInitialized","_updateUrl","bindEvents","history","_popStateInProgress","_blockHashChange","_currentHash","_numPositionUpdates","_uid","_maxUid","_destination","_position","isValidState","parseCurrentHash","pushOrReplaceState","destination","updateInternalState","uid","_initialRotation","_initialBookmark","pageHide","unbindEvents","_updateViewareaTimeout","isValidPage","forceReplace","isDestHashesEqual","isDestArraysEqual","tryPushCurrentPosition","popStateInProgress","initialBookmark","initialRotation","#pushOrReplaceState","shouldReplace","newState","newUrl","replaceState","pushState","#tryPushCurrentPosition","temporary","position","#isValidPage","#isValidState","checkReload","perfEntry","performance","getEntriesByType","#updateInternalState","removeTemporary","#parseCurrentHash","checkNameddest","substring","nameddest","updateViewarea","#updateViewarea","pdfOpenParams","popState","#popState","newHash","hashChanged","#pageHide","#bindEvents","#unbindEvents","destHash","pushHash","firstDest","secondDest","isEntryEqual","second","PDFLayerViewer","updateLayers","_optionalContentConfig","_optionalContentHash","layersCount","groupId","setVisibility","getHash","_setNestedName","fontStyle","groups","getOrder","queue","levelData","itemsDiv","order","group","getGroup","#updateLayers","getOptionalContentConfig","intent","PDFOutlineViewer","_currentOutlineItem","_currentOutlineItemCapability","_sidebarView","_outline","_pageNumberToDestHashCapability","outlineCount","loadingParams","currentOutlineItemPromise","attachment","_setStyles","bold","italic","fontWeight","totalCount","nestedCount","nestedItems","outline","pageNumberToDestHash","_getPageNumberToDestHash","linkElement","pageNumberNesting","nesting","currentNesting","DELAY_BEFORE_HIDING_CONTROLS","ACTIVE_SELECTOR","CONTROLS_SELECTOR","MOUSE_SCROLL_COOLDOWN_TIME","PAGE_SWITCH_THRESHOLD","SWIPE_MIN_DISTANCE_THRESHOLD","SWIPE_ANGLE_THRESHOLD","PDFPresentationMode","fullscreenChangeAbortController","windowAbortController","contextMenuOpen","mouseScrollTimeStamp","mouseScrollDelta","touchSwipeState","request","requestFullscreen","addFullscreenChangeListeners","notifyStateChange","scaleValue","currentScaleValue","pageViewsReady","hasEqualPageSizes","removeFullscreenChangeListeners","mouseWheel","#mouseWheel","currentTime","now","storedTime","resetMouseScrollState","totalDelta","success","#notifyStateChange","enter","#enter","addWindowListeners","showControls","empty","exit","#exit","removeWindowListeners","hideControls","mouseDown","#mouseDown","contextMenu","#contextMenu","#showControls","controlsTimeout","#hideControls","#resetMouseScrollState","touchSwipe","#touchSwipe","touches","startX","pageX","startY","pageY","endX","endY","dx","dy","absAngle","#addWindowListeners","touchSwipeBind","passive","#removeWindowListeners","#addFullscreenChangeListeners","fullscreenElement","#removeFullscreenChangeListeners","XfaLayerBuilder","annotationStorage","xfaHtml","_cancelled","viewport","parameters","dontFlip","getXfa","textDivs","update","getXfaHtmlForPrinting","printContainer","allXfaHtml","scale","PDF_TO_CSS_UNITS","xfaPage","children","builder","activeService","viewerApp","initialized","renderPage","activeServiceOnEntry","printAnnotationStoragePromise","scratchCanvas","PRINT_UNITS","PDF","ctx","getContext","fillStyle","fillRect","restore","printAnnotationStorage","renderContext","canvasContext","getViewport","ENABLE_STORAGE","renderTask","PDFPrintService","pagesOverview","_printResolution","_optionalContentConfigPromise","_printAnnotationStoragePromise","currentPage","throwIfInactive","every","pageStyleSheet","ensureOverlay","renderPages","isPureXfa","renderNextPage","renderProgress","useRenderedPage","toBlob","src","toDataURL","wrapper","onload","onerror","performPrint","print","eventType","CustomEvent","bubbles","cancelable","getElementById","progress","progressBar","progressPerc","ctrlKey","metaKey","altKey","chrome","opera","stopImmediatePropagation","stopPropagationIfNeeded","overlayPromise","PDFPrintServiceFactory","initGlobals","supportsPrinting","createPrintService","CLEANUP_TIMEOUT","PDFRenderingQueue","pdfThumbnailViewer","onIdle","highestPriorityPage","idleTimeout","printing","isThumbnailViewEnabled","defineProperty","setThumbnailViewer","isHighestPriority","renderingId","renderHighestPriority","currentlyVisiblePages","forceRendering","getHighestPriority","scrolledDown","preRenderExtra","visibleViews","numVisible","isViewFinished","firstId","lastId","visibleIds","holeId","holeView","preRenderIndex","preRenderView","renderingState","renderView","draw","finally","PDFScriptingManager","closeCapability","destroyCapability","externalServices","ready","scripting","willPrintCapability","destroyScripting","objects","calculationOrder","docActions","getFieldObjects","getCalculationOrderIds","getJSActions","initScripting","updateFromSandbox","dispatchPageClose","dispatchPageOpen","_pageOpenPending","appInfo","docInfo","actions","dispatchWillSave","dispatchDidSave","dispatchWillPrint","dispatchDidPrint","destroyPromise","_visitedPages","#updateFromSandbox","isChangingPresentationMode","siblings","command","modes","pagesPromise","log","increaseScale","decreaseScale","elementId","setValue","#dispatchPageOpen","visitedPages","pageView","getPageView","actionsPromise","#dispatchPageClose","#initScripting","#destroyScripting","race","SIDEBAR_WIDTH_VAR","SIDEBAR_MIN_WIDTH","SIDEBAR_RESIZING_CLASS","UI_NOTIFICATION_CLASS","PDFSidebar","mouseMoveBound","mouseMove","mouseUpBound","mouseUp","outerContainerWidth","isOpen","isInitialViewSet","isInitialEventDispatched","onToggled","onUpdateThumbnails","outerContainer","sidebarContainer","resizer","thumbnailButton","outlineButton","attachmentsButton","layersButton","thumbnailView","outlineView","attachmentsView","layersView","_currentOutlineItemButton","currentOutlineItemButton","hideUINotification","switchView","visibleView","setInitialView","forceOpen","isViewChanged","#dispatchEvent","showUINotification","#showUINotification","#hideUINotification","onTreeLoaded","enabled","updateWidth","updated","#updateWidth","maxWidth","#mouseMove","#mouseUp","DRAW_UPSCALE_FACTOR","MAX_NUM_SCALING_STEPS","THUMBNAIL_WIDTH","TempImageFactory","tempCanvas","getCanvas","alpha","destroyCanvas","PDFThumbnailView","defaultViewport","renderingQueue","pageColors","pageLabel","pdfPageRotate","pageL10nArgs","updateDims","_placeholderImg","#updateDims","ratio","canvasWidth","canvasHeight","setPdfPage","totalRotation","cancelRendering","image","replaceWith","getPageDrawContext","#getPageDrawContext","upscaleFactor","canvas","outputScale","convertCanvasToImage","#convertCanvasToImage","reducedCanvas","reduceImage","finishRenderTask","#finishRenderTask","drawViewport","renderContinueCallback","cont","onContinue","resultPromise","setImage","thumbnailCanvas","#reduceImage","drawImage","reducedWidth","reducedHeight","reducedImage","reducedImageCtx","#pageL10nArgs","setPageLabel","THUMBNAIL_SCROLL_MARGIN","THUMBNAIL_SELECTED_CLASS","PDFThumbnailViewer","scroll","scrollUpdated","resetView","#scrollUpdated","getThumbnail","_thumbnails","getVisibleThumbs","#getVisibleThumbs","scrollThumbnailIntoView","prevThumbnailView","shouldScroll","updateArgs","thumbnail","cleanup","#resetView","_pageLabels","firstPagePromise","firstPdfPage","pageNum","#cancelRendering","setPageLabels","labels","ensurePdfPageLoaded","#ensurePdfPageLoaded","thumbView","getScrollAhead","#getScrollAhead","visibleThumbs","scrollAhead","AnnotationEditorLayerBuilder","annotationLayer","drawLayer","onAppend","accessibilityManager","annotationEditorLayer","clonedViewport","annotations","isInvisible","AnnotationLayerBuilder","renderForms","hasJSActionsPromise","fieldObjectsPromise","annotationCanvasMap","annotationEditorUIManager","_hasJSActionsPromise","_fieldObjectsPromise","_annotationCanvasMap","_accessibilityManager","_annotationEditorUIManager","hasJSActions","fieldObjects","getAnnotations","updatePresentationModeState","#updatePresentationModeState","disableFormElements","section","inert","DrawLayerBuilder","setParent","getDrawLayer","PDF_ROLE_TO_HTML_ROLE","Document","DocumentFragment","Part","Sect","Div","Aside","NonStruct","P","H","FENote","Sub","Lbl","Span","Em","Strong","Link","Annot","Form","Ruby","RB","RT","RP","Warichu","WT","WP","L","LI","LBody","Table","TR","TH","TD","THead","TBody","TFoot","Caption","Figure","Formula","Artifact","HEADING_PATTERN","StructTreeLayerBuilder","treeDom","renderingDone","structTree","walk","#setAttributes","structElement","htmlElement","alt","#walk","role","kid","TextAccessibilityManager","textChildren","textNodes","waitingElements","setTextMapping","compareElementPositions","#compareElementPositions","e1","e2","centerX1","centerX2","enable","nodeIndex","addIdToAriaOwns","isRemovable","addPointerInTextLayer","disable","removePointerInTextLayer","owns","#addIdToAriaOwns","child","moveElementInDOM","contentElement","hasChildNodes","elementToCompare","before","after","TextHighlighter","findController","textContentItemsStr","divs","texts","_updateMatches","_convertMatches","iIndex","mm","begin","divIdx","_renderMatches","isSelectedPage","selectedMatchIdx","prevEnd","infinity","beginText","appendTextToDiv","fromOffset","toOffset","span","i0","i1","lastDivIdx","lastOffset","isSelected","highlightSuffix","n0","n1","clearedUntilDivIdx","n","TextLayerBuilder","textContentSource","textLayers","selectionChangeAbortController","highlighter","tabIndex","finishRendering","#finishRendering","endOfContent","bindMouse","onBefore","removeGlobalSelectionListener","setTextContentSource","#bindMouse","clipboardData","setData","enableGlobalSelectionListener","#removeGlobalSelectionListener","textLayerDiv","#enableGlobalSelectionListener","isFirefox","prevRange","activeTextLayers","getRangeAt","intersectsNode","endDiv","getPropertyValue","modifyStart","compareBoundaryPoints","Range","END_TO_END","START_TO_END","endContainer","parentTextLayer","insertBefore","cloneRange","DEFAULT_LAYER_PROPERTIES","LAYERS_ORDER","PDFPageView","ENABLE_FORMS","hasRestrictedScaling","layerProperties","loadingId","previousRotation","renderError","useThumbnailCanvas","directDrawing","initialOptionalContent","regularAnnotations","viewportMap","layers","_isStandalone","hasViewer","_container","zoomLayer","xfaLayer","structTreeLayer","setDimensions","hasInitialVisibility","addLayer","#addLayer","oldDiv","layer","#setDimensions","foreground","background","filterFactory","addHighlightHCMFilter","_textHighlighter","renderAnnotationLayer","#renderAnnotationLayer","renderAnnotationEditorLayer","#renderAnnotationEditorLayer","renderDrawLayer","#renderDrawLayer","renderXfaLayer","#renderXfaLayer","buildXfaTextContentItems","#renderTextLayer","readableStream","streamTextContent","includeMarkedContent","renderStructTreeLayer","#renderStructTreeLayer","tree","getStructTree","#buildXfaTextContentItems","_resetZoomLayer","removeFromDOM","zoomLayerCanvas","keepZoomLayer","keepAnnotationLayer","keepAnnotationEditorLayer","keepXfaLayer","keepTextLayer","zoomLayerNode","annotationLayerNode","annotationEditorLayerNode","xfaLayerNode","textLayerNode","layerIndex","indexOf","drawingDelay","onlyCssZoom","postponeDrawing","cancelExtraDelay","cssTransform","redrawAnnotationLayer","redrawAnnotationEditorLayer","redrawXfaLayer","redrawTextLayer","hideTextLayer","timestamp","originalViewport","relativeRotation","absRotation","scaleX","scaleY","getPagePoint","convertToPdfPoint","separateAnnots","canvasWrapper","annotationLayerDiv","showCanvas","hasHCM","isLastShow","invScale","pixelsInViewport","maxScale","sqrt","sfx","sfy","annotationEditorLayerDiv","DEFAULT_CACHE_SIZE","PagesCountLimit","FORCE_SCROLL_MODE_PAGE","FORCE_LAZY_PAGE_INIT","PAUSE_EAGER_PAGE_INIT","isValidAnnotationEditorMode","PDFPageViewBuffer","buf","destroyFirstView","resize","newSize","idsToKeep","#destroyFirstView","firstView","PDFViewer","buffer","altTextManager","annotationEditorHighlightColors","containerTopLeft","mlManager","getAllTextInProgress","hiddenCopyElement","interruptCopyCondition","previousContainerHeight","scrollModePageState","scaleTimeoutId","viewerVersion","_getVisiblePages","_scriptingManager","scriptingManager","removePageBorders","defaultRenderingQueue","_scrollUpdate","_resetView","updateContainerHeightCss","_pages","getCachedPageViews","_setCurrentPageNumber","resetCurrentPageView","currentPageLabel","currentScale","_currentScale","setScale","noScroll","_currentScaleValue","refresh","onePageRendered","_onePageRenderedCapability","_pagesCapability","_layerProperties","self","initializePermissions","#initializePermissions","permissions","COPY","MODIFY_CONTENTS","MODIFY_ANNOTATIONS","FILL_INTERACTIVE_FORMS","onePageRenderedOrForceFetch","#onePageRenderedOrForceFetch","visibilityState","hiddenCapability","onVisibilityChange","getAllText","copyCallback","#copyCallback","anchorNode","containsNode","savedCursor","interruptCopy","ev","clipboard","writeText","_cancelRendering","permissionsPromise","getPermissions","_scrollMode","onBeforeDraw","onAfterDraw","updateMode","viewerElement","ensurePageViewVisible","_spreadMode","_updateSpreadMode","getPagesLeft","Language","_location","_previousScrollMode","previousPageNumber","scrollDown","pages","_updateScrollMode","#ensurePageViewVisible","pageIndexSet","parity","spread","dummyPage","#scrollIntoView","pageSpot","isSameScale","#isSameScale","newScale","setScaleUpdatePages","#setScaleUpdatePages","newValue","preset","presetValue","pageWidthScaleFactor","#pageWidthScaleFactor","#setScale","hPadding","vPadding","pageWidthScale","pageHeightScale","horizontalScale","#resetCurrentPageView","widthScale","heightScale","pageWidth","pageHeight","boundingRect","convertToViewportPoint","_updateLocation","firstPage","normalizedScaleValue","currentPageView","topLeft","intLeft","intTop","visiblePages","numVisiblePages","newCacheSize","isSimpleLayout","currentId","stillFullyVisible","containsElement","_isContainerRtl","isHorizontalScrollbarEnabled","isVerticalScrollbarEnabled","firstPageView","getPagesOverview","initialOrientation","_getPageAdvance","pageLayout","yArray","expectedId","advance","scaleFactor","steps","ceil","toFixed","#updateContainerHeightCss","borderBoxSize","blockSize","editId","isFromKeyboard","annotationEditorParams","updateParams","noUpdate","SecondaryToolbar","presentationModeButton","printButton","downloadButton","viewBookmarkButton","firstPageButton","lastPageButton","pageRotateCwButton","pageRotateCcwButton","cursorSelectToolButton","eventDetails","cursorHandToolButton","scrollPageButton","scrollVerticalButton","scrollHorizontalButton","scrollWrappedButton","spreadNoneButton","spreadOddButton","spreadEvenButton","documentPropertiesButton","openFileButton","setPageNumber","setPagesCount","scrollModeChanged","spreadModeChanged","cursorToolChanged","#cursorToolChanged","#scrollModeChanged","forceScrollModePage","isHorizontal","#spreadModeChanged","toolbar","Toolbar","zoomIn","zoomOut","editorFreeTextButton","FREETEXT","editorHighlightButton","HIGHLIGHT","editorInkButton","INK","editorStampButton","STAMP","editorHighlightColorPicker","setAnnotationEditorUIManager","#setAnnotationEditorUIManager","parentContainer","colorPicker","setMainHighlightColorPicker","renderMainDropdown","hasPageLabels","setPageScale","pageScaleValue","pageScale","updateLoadingIndicatorState","editorModeChanged","scaleSelect","toUpperCase","oncontextmenu","#editorModeChanged","editorFreeTextParamsToolbar","editorHighlightParamsToolbar","editorInkParamsToolbar","editorStampParamsToolbar","isDisable","resetNumPages","predefinedValueFound","customScaleOption","loading","DEFAULT_VIEW_HISTORY_CACHE_SIZE","ViewHistory","cacheSize","_initializedPromise","databaseStr","database","files","branch","file","setMultiple","properties","getMultiple","FORCE_PAGES_LOADED_TIMEOUT","WHEEL_ZOOM_DISABLED_TIMEOUT","ViewOnLoad","PREVIOUS","PDFViewerApplication","_initializedCapability","settled","appConfig","pdfLoadingTask","printService","pdfRenderingQueue","pdfPresentationMode","pdfDocumentProperties","pdfLinkService","pdfSidebar","pdfOutlineViewer","pdfAttachmentViewer","pdfLayerViewer","pdfCursorTools","pdfScriptingManager","store","preferences","secondaryToolbar","downloadComplete","_downloadUrl","_eventBusAbortController","_windowAbortController","documentInfo","_contentDispositionFilename","_contentLength","_saveInProgress","_wheelUnusedTicks","_wheelUnusedFactor","_touchUnusedTicks","_touchUnusedFactor","_PDFBug","_hasAnnotationEditors","_title","_touchInfo","_isCtrlKeyDown","_nimbusDataPromise","_caretBrowsing","_isScrolling","l10nPromise","_parseHashParams","getElementsByTagName","appContainer","_initializeViewerComponents","bindWindowEvents","loadPDFBug","PDFBug","loadCSS","_cleanup","_scriptingDocProperties","matchMedia","altTextDialog","sidebar","findBar","documentProperties","_docFilename","supportsFullscreen","passwordOverlay","passwordPrompt","run","config","queryString","search","validateFileURL","fileInput","_openFileInput","dataTransfer","dropEffect","effectAllowed","msg","viewFind","_hideViewBookmark","zoomReset","fullscreenEnabled","loadingBar","barElement","setTitleUsingUrl","decodeURIComponent","setTitle","editorIndicator","_unblockDocumentLoadEvent","_annotationStorageModified","promises","workerParams","originalUrl","apiParams","loadingTask","onPassword","onProgress","loaded","load","_documentError","_ensureDownloadComplete","getData","saveDocument","stats","editorStats","downloadOrSave","moreInfo","_otherError","moreInfoText","stack","lineNumber","level","pageLayoutPromise","getPageLayout","pageModePromise","getPageMode","openActionPromise","getOpenAction","storedPromise","fingerprints","sidebarView","_initializeAnnotationStorageCallbacks","timeStamp","stored","pageMode","openAction","_initializePdfHistory","initialDest","_initializeAutoPrint","getOutline","getAttachments","_initializePageLabels","_initializeMetadata","jsActions","triggerAutoPrint","some","js","triggerPrinting","pdfTitle","metadataTitle","IsXFAPresent","IsAcroFormPresent","IsSignaturesPresent","getPageLabels","numLabels","standardLabels","emptyLabels","onSetModified","beforeUnload","onResetModified","onAnnotationEditor","storedHash","setRotation","setViewerModes","beforePrint","alert","afterPrint","resetModified","rotatePages","requestPresentationMode","webViewerResize","webViewerHashchange","webViewerPageRender","webViewerPageRendered","webViewerUpdateViewarea","webViewerPageChanging","webViewerScaleChanging","webViewerRotationChanging","webViewerSidebarViewChanged","webViewerPageMode","webViewerNamedAction","webViewerPresentationModeChanged","webViewerPresentationMode","webViewerSwitchAnnotationEditorMode","webViewerSwitchAnnotationEditorParams","webViewerPrint","webViewerDownload","webViewerFirstPage","webViewerLastPage","webViewerNextPage","webViewerPreviousPage","webViewerZoomIn","webViewerZoomOut","webViewerZoomReset","webViewerPageNumberChanged","webViewerScaleChanged","webViewerRotateCw","webViewerRotateCcw","webViewerOptionalContentConfig","webViewerSwitchScrollMode","webViewerScrollModeChanged","webViewerSwitchSpreadMode","webViewerSpreadModeChanged","webViewerDocumentProperties","webViewerFindFromUrlHash","webViewerUpdateFindMatchesCount","webViewerUpdateFindControlState","webViewerFileInputChange","webViewerOpenFile","addWindowResolutionChange","webViewerResolutionChange","mediaQueryList","webViewerVisibilityChange","webViewerWheel","webViewerTouchStart","webViewerTouchMove","webViewerTouchEnd","webViewerClick","webViewerKeyDown","webViewerKeyUp","_lastScrollTop","_lastScrollLeft","scrollend","unbindWindowEvents","_accumulateTicks","ticks","prop","wholeTicks","trunc","_accumulateFactor","previousScale","factor","newFactor","_centerAtPos","scaleDiff","blockUnblockOnload","scriptingReady","HOSTED_VIEWER_ORIGINS","viewerOrigin","origin","fileOrigin","setZoomDisabledTimeout","zoomDisabledTimeout","exp","isBuiltInMac","isPinchToZoom","deltaZ","DOM_DELTA_PAGE","sign","PIXELS_PER_LINE_SCALE","touch0","touch1","identifier","touch0X","touch0Y","touch1X","touch1Y","page0X","page0Y","page1X","page1Y","pTouch0X","pTouch0Y","pTouch1X","pTouch1Y","v1X","v1Y","v2X","v2Y","det","diff0X","diff1X","diff0Y","diff1Y","dotProduct","distance","pDistance","newScaleFactor","isViewerInPresentationMode","handled","ensureViewerFocused","cmd","curElement","curElementTagName","isContentEditable","turnPage","turnOnlyIfPageFit","returnValue","webViewerAnnotationEditorStatesChanged","webViewerReportTelemetry","pdfjsVersion","pdfjsBuild","AppConstants","PDFViewerApplicationConstants","PDFViewerApplicationOptions","getViewerConfiguration","webViewerLoad","readyState"],"sourceRoot":""}