{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///tw-web/tw_viewer.js","webpack:///web/pdfjs.js","webpack:///tw-web/app.js","webpack:///tw-web/bookmarks.js","webpack:///tw-web/util.js","webpack:///tw-web/ui_utils.js","webpack:///tw-web/download_manager.js","webpack:///tw-web/pdfjs-lib.js","webpack:///src/display/api_compatibility.js","webpack:///src/shared/is_node.js","webpack:///tw-web/message_box.js","webpack:///tw-web/multi_viewer.js","webpack:///tw-web/base_viewer.js","webpack:///tw-web/pdf_history.js","webpack:///tw-web/text_layer_builder.js","webpack:///tw-web/annotation_layer_builder.js","webpack:///tw-web/overlay_manager.js","webpack:///tw-web/password_prompt.js","webpack:///tw-web/pdf_document_properties.js","webpack:///tw-web/pdf_link_service.js","webpack:///node_modules/@babel/runtime/regenerator/index.js","webpack:///node_modules/@babel/runtime/node_modules/regenerator-runtime/runtime.js","webpack:///node_modules/webpack/buildin/module.js","webpack:///tw-web/pdf_print_service.js","webpack:///tw-web/single_viewer.js","webpack:///tw-web/text_selection_options.js","webpack:///tw-web/toolbar.js","webpack:///tw-web/find_options.js","webpack:///tw-web/pdf_find_bar.js","webpack:///tw-web/pdf_find_controller.js","webpack:///tw-web/pdf_find_utils.js","webpack:///tw-web/pdf_document.js","webpack:///tw-web/zoom_service.js"],"names":["window","params","bubbles","cancelable","detail","evt","document","CustomEvent","pdfWorkerLocation","constructor","observe","observable","newObservable","el","size","height","width","unobserve","obj","changedEntries","currentHeight","currentWidth","GlobalWorkerOptions","frontEnd","TWobserver","index","i","console","link","isStylesheet","viewersDiv","viewerDiv","isStatic","tryToConnectTWViewer","viewerJS","activateMutationObserver","targetNode","config","attributes","childList","subtree","characterData","id","optionsVal","options","JSON","mutationCallback","mutationsList","mutation","j","removed","k","added","activateSizeResizeObserver","mutations","msg","viewerContainer","onLoadDocument","pdfjsLib","__non_webpack_require__","module","overlayName","container","app","closeButton","fields","fileName","fileSize","title","author","subject","keywords","creationDate","modificationDate","creator","producer","version","pageCount","pageSize","mainDiv","ViewerType","me","event","ev","file","_showDocumentLoading","_activateView","currentViewerSettings","_setElements","elementsClass","texts","textItems","_mouseWheelHandler","e","_pageRendered","pageNum","doc","lastPage","firstPage","totalHeight","topPos","tempPageNum","pagePromise","page","viewport","scale","rotation","pagesSizeInfo","maxWidth","numberOfBiggestPage","minZoomFactor","zoomFactorWidth","zoomFactorHeight","pageZoom","_loadDocument","_loadDocumentError","reason","callback","url","passwordField","passwordPromptDiv","showInvalidPassword","invalidPasswordText","error","reasonTxt","tw_focus","bookmarkDivWidth","loadDocumentFromClick","dispatchTWEvent","twEvent","target","showError","showMsg","printWin","screen","isSafari","p","disableSelection","textDivs","gotoPage","num","loadDocumentFromUrl","tw2018func_getPDFFileNameFromURL","loadingTask","password","pdfDoc","loadDocumentFromFile","fileReader","evt1","buffer","data","getPageTextContent","mainWidth","showBookmarksOnOpen","preserveBookmarksState","bookmarksFullyExpanded","_showMobile","val","_showDesktop","bookmarkWidth","_addBookmark","outlineItem","a","bookmark","parseInt","toggleDiv","outlineItems","parentDiv","itemTogglers","_expandBookmarkItem","div","_closeBookmarkItem","_toggleBookmark","tw_toggleCssClass","show","tw_disableBtn","tw_hide","destinations","result","Object","btn","disable","elem","changeOrientation","rotate","parts","query","ii","param","key","value","decodeURIComponent","reURI","reFilename","splitURI","suggestedFilename","MIN_Y_OFFSET","MIN_X_OFFSET","TW_DATA_TAG","CSS_UNITS","DEFAULT_SCALE_VALUE","DEFAULT_SCALE","MIN_SCALE","MAX_SCALE","UNKNOWN_SCALE","MAX_AUTO_SCALE","SCROLLBAR_PADDING","VERTICAL_PADDING","LOADINGBAR_END_OFFSET_VAR","PresentationModeState","UNKNOWN","NORMAL","CHANGING","FULLSCREEN","SidebarView","NONE","THUMBS","OUTLINE","ATTACHMENTS","LAYERS","RendererType","CANVAS","SVG","TextLayerMode","DISABLE","ENABLE","ENABLE_ENHANCE","ScrollMode","VERTICAL","HORIZONTAL","WRAPPED","SpreadMode","ODD","EVEN","devicePixelRatio","backingStoreRatio","ctx","pixelRatio","sx","sy","scaled","skipOverflowHiddenElements","parent","element","offsetY","offsetX","getComputedStyle","spot","debounceScroll","rAF","currentX","viewAreaElement","lastX","state","currentY","lastY","right","down","_eventHandler","minIndex","maxIndex","items","condition","currentIndex","currentItem","Math","xinv","limit","x_","x","b","c","d","q","r","elt","views","pageTop","sortByVisibility","horizontal","rtl","top","scrollEl","bottom","left","view","elementBottom","elementLeft","elementRight","visible","numViews","firstVisibleElementInd","binarySearchFirstItem","backtrackBeforeAllVisibleElements","lastEdge","viewWidth","viewHeight","viewRight","viewBottom","hiddenHeight","hiddenWidth","fractionHeight","fractionWidth","percent","y","widthPercent","first","last","pc","delta","angle","normalizeWheelEventDirection","MOUSE_DOM_DELTA_PIXEL_MODE","MOUSE_DOM_DELTA_LINE_MODE","MOUSE_PIXELS_PER_LINE","MOUSE_LINES_PER_PAGE","Number","mode","animationStarted","units","progressSize","setWidth","viewer","scrollbarWidth","isNaN","clamp","moved","len","arr","write","read","curRoot","curActiveOrFocused","DISABLE_CREATE_OBJECT_URL","apiCompatibilityParams","disableCreateObjectURL","tw2018func_download","setTimeout","downloadUrl","createValidAbsoluteUrl","downloadData","newBlob","type","navigator","blobUrl","createObjectURL","download","URL","TWAnnotationLayer","TWcreateObjectURL","TWcreatePromiseCapability","TWcreateValidAbsoluteUrl","TWgetDocument","TWrenderTextLayer","TWRenderingCancelledException","compatibilityParams","isNodeJS","process","clickClose","open","Promise","previousVisitedBtn","nextVisitedBtn","scrollPageIntoView","pageDiv","getCanvas","canvas","cleanPage","visiblePages","getPageVisiblePart","rect","toolbarRect","visiblePart","maxPerc","currentPage","perc","visiblePageNum","showPage","renderPage","pageRenderInfo","functionText","atob","renderContext","canvasContext","normalizeWhitespace","textLayerDiv","pageIndex","findController","selectionDisabled","pdfPage","annotationStorage","imageResourcesPath","renderInteractiveForms","linkService","downloadManager","enableScripting","hasJSActionsPromise","mouseState","err","MULTI_VIEW","SINGLE_VIEW","currentZoomLevel","currentPageNum","validZoomValue","isZoomFitToPage","fitToPage","maxZoomLevel","tempPageNumber","applySettings","settings","getPageView","add","EXPAND_DIVS_TIMEOUT","enhanceTextSelection","endOfContent","timeout","render","textLayerFrag","textContent","textContentStream","textContentItemsStr","setTextContentStream","setTextContent","convertMatches","ret","iIndex","end","queryLen","m","matches","matchIdx","match","begin","divIdx","offset","matchesLength","renderMatches","prevEnd","pageIdx","isSelectedPage","selectedMatchIdx","highlightAll","infinity","appendTextToDiv","content","node","span","i0","i1","isSelected","highlightSuffix","beginText","clearedUntilDivIdx","n","pageMatches","pageMatchesLength","expandDivsTimer","clearTimeout","adjustTop","divBounds","createTextLayerBuilder","intent","hasJSActions","annotations","parameters","dontFlip","AnnotationLayer","register","callerCloseMethod","canForceClose","resolve","alreadyRegistered","unregister","close","_keyDown","clickOK","clickCancel","DEFAULT_FIELD_CONTENT","US_PAGE_NAMES","METRIC_PAGE_NAMES","isPortrait","pageNames","eventBus","freezeFieldData","writable","enumerable","configurable","currentPageNumber","pagesRotation","contentDispositionFilename","info","tw2018func_getPageSizeInches","_currentPageNumber","_pagesRotation","tw2018func_cloneObj","setDocument","setFileSize","reset","_updateUI","_parseFileSize","kb","size_b","size_kb","size_mb","_parsePageSize","pageSizeInches","tw2018func_isPortraitOrientation","sizeInches","sizeMillimeters","pageName","tw2018func_getPageName","exactMillimeters","intMillimeters","_parseDate","dateToParse","year","month","day","hours","minutes","seconds","utRel","offsetHours","offsetMinutes","date","Date","dateString","timeString","externalLinkTarget","externalLinkRel","externalLinkEnabled","ignoreDestinationZoom","setViewer","pdfViewer","setHistory","navigateTo","_goToDestinationHelper","namedDest","destRef","explicitDest","pageNumber","destArray","Array","goToPage","getDestinationHash","dest","escape","str","getAnchorUrl","setHash","hash","parseQueryString","source","phraseSearch","zoomArgs","zoomArg","zoomArgNumber","parseFloat","name","allowNegativeOffset","unescape","isValidExplicitDestination","executeNamedAction","action","cachePageRef","refStr","pageRef","_cachedPageNumber","isPageVisible","isPageCached","destLength","zoom","allowNull","require","runtime","Op","hasOwn","$Symbol","iteratorSymbol","asyncIteratorSymbol","toStringTagSymbol","protoGenerator","outerFn","generator","context","tryLocsList","makeInvokeMethod","exports","arg","fn","GenStateSuspendedStart","GenStateSuspendedYield","GenStateExecuting","GenStateCompleted","ContinueSentinel","IteratorPrototype","getProto","NativeIteratorPrototype","values","Gp","GeneratorFunctionPrototype","Generator","GeneratorFunction","prototype","ctor","genFun","__await","record","tryCatch","reject","invoke","previousPromise","callInvokeWithMethodAndArg","defineIteratorMethods","AsyncIterator","PromiseImpl","iter","wrap","method","doneResult","delegate","delegateResult","maybeInvokeDelegate","done","entry","tryLoc","locs","keys","next","iteratorMethod","iterable","Context","stop","rootEntry","rootRecord","dispatchException","handle","hasCatch","hasFinally","abrupt","finallyEntry","complete","finish","resetTryEntry","thrown","delegateYield","iterator","resultName","nextLoc","regeneratorRuntime","Function","get","updatePrintProgress","current","totalPages","css","overlayContainer","printProgressOverlay","span1","renderNextPage","usePageForPrinting","img","renderPrintPage","scratchCanvas","PRINT_RESOLUTION","PRINT_UNITS","pageOriginalWidth","pageOriginalHeight","transform","singleCtx","bar","findField","highlightAllCheckbox","caseSensitiveCheckbox","wholeWord","findMsg","findResultsCount","findPreviousButton","findNextButton","searchButton","searchResult","findResultCurrent","pageNumberValue","btnElements","tooltipSpan","_toggleFindOptions","optionsBtn","coords","rectToolbar","rect2","integratedFind","_toggleTooltip","elements","_displayToolbarGroupSeparator","hiddenChildrenCount","isSeparatorHidden","group","child","separator","_setDisplay","updateStatus","enableToolbar","btnElement","divElements","divElement","inputElements","self","dispatchEvent","caseSensitive","findPrevious","updateUIState","findMsgText","findStatusText","FindStatus","previous","updateResultsCount","matchCount","currentMatch","FIND_FOUND","FIND_NOTFOUND","FIND_WRAPPED","FIND_PENDING","FIND_SCROLL_OFFSET_TOP","FIND_SCROLL_OFFSET_LEFT","checkOverflow","replace","setFindBar","normalize","calculateMatch","pageContent","_isEntireWord","startIdx","getCharacterType","endIdx","extractTextPromisesResolves","numPages","extractPageText","handleEvent","updatePage","currentPageIndex","numPageMatches","matchesReady","numMatches","updateMatchPosition","tw2018func_scrollIntoView","advanceOffsetPage","updateMatch","wrapped","previousPage","_shouldDirtyMatch","CharacterType","SPACE","ALPHA_LETTER","PUNCT","HAN_LETTER","KATAKANA_LETTER","HIRAGANA_LETTER","HALFWIDTH_KATAKANA_LETTER","THAI_LETTER","charCode","isAlphabeticalScript","isAscii","isAsciiSpace","isAsciiAlpha","isAsciiDigit","isThai","isHan","isKatakana","isHiragana","isHalfwidthKatakana","initialZoom","zoomValue","_getToolbarZoomLi","li","scaleVal","horizontalSeparator","fitSize","scaleAttr","_checkIfVerticalScrollIsRequired","horizontalScrollBarHeight","isHorizontalBarVisible","_getFitToPageZoomLevel","numberOfPageWithBiggestSize","biggestPage","isVerticalScrollRequired","verticalScrollWidth","controlHeight","controlWidth","maxPageWidth","maxPageHeight","maxBitmapSizeInBytes","bytesPerPixel","displayRatio","mouseWheelHandler","reloadDocument","executeZoom","setZoomLevels","customZoom1","customZoom2","customZoom1Added","customZoom2Added","defaultZoomLevels","zoomLevel","refreshZoomLevels","heightArea","fitToPageTemp","setZoomValue"],"mappings":"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","file":"tw_viewer.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","/* eslint-disable prettier/prettier */\n\n/**\n * CustomEvent() polyfill\n * https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/CustomEvent#Polyfill\n */\n(function () {\n if (typeof window.CustomEvent === \"function\") {\n return false;\n }\n\n function CustomEvent(event, params) {\n params = params || { bubbles: false, cancelable: false, detail: undefined };\n const evt = document.createEvent(\"CustomEvent\");\n evt.initCustomEvent(\n event,\n params.bubbles,\n params.cancelable,\n params.detail\n );\n return evt;\n }\n\n CustomEvent.prototype = window.Event.prototype;\n\n window.CustomEvent = CustomEvent;\n return true;\n})();\n\nimport { GlobalWorkerOptions } from \"pdfjs-lib\";\nimport { TWViewerPdfApp } from \"./app.js\";\n\nconst pdfWorkerLocation =\n typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"PRODUCTION\")\n ? \"../src/worker_loader.js\"\n : \"../build/pdf.worker.js\";\n\nclass ResizeObserver {\n constructor(callback) {\n this.observables = [];\n // Array of observed elements that looks like this:\n // [{\n // el: domNode,\n // size: {height: x, width: y}\n // }]\n this.boundCheck = this.check.bind(this);\n this.boundCheck();\n this.callback = callback;\n }\n\n observe(el) {\n if (this.observables.some(observable => observable.el === el)) {\n return;\n }\n const newObservable = {\n el,\n size: {\n height: el.clientHeight,\n width: el.clientWidth,\n },\n };\n this.observables.push(newObservable);\n }\n\n unobserve(el) {\n this.observables = this.observables.filter(obj => obj.el !== el);\n }\n\n disconnect() {\n this.observables = [];\n }\n\n check() {\n const changedEntries = this.observables\n .filter(obj => {\n const currentHeight = obj.el.clientHeight;\n const currentWidth = obj.el.clientWidth;\n if (\n obj.size.height !== currentHeight ||\n obj.size.width !== currentWidth\n ) {\n obj.size.height = currentHeight;\n obj.size.width = currentWidth;\n return true;\n }\n return false;\n })\n .map(obj => obj.el);\n if (changedEntries.length > 0) {\n this.callback(changedEntries);\n }\n window.requestAnimationFrame(this.boundCheck);\n }\n}\n\nGlobalWorkerOptions.workerSrc = pdfWorkerLocation;\nwindow._twViewerPdfApps = [];\nconst frontEnd = true;\nlet TWobserver = null;\n\n/**\n * Manager for the PDF Viewers.\n */\nwindow.TWPdfViewerUtil = {};\n\n/**\n * @returns {string[]} List of built-in themes\n */\nwindow.TWPdfViewerUtil.getBuiltInThemes = function () {\n return [\n \"blue-circle\",\n \"blue-element\",\n \"blue-grey\",\n \"colorful-morphism\",\n \"dark-cyan\",\n \"dynamic-purple\",\n \"light\",\n \"purple-blue\",\n \"red-purple\",\n \"forest-brown\",\n \"white-shapes\",\n ];\n};\n\nwindow.TWPdfViewerUtil.removeViewer = function (id) {\n let index = -1;\n for (let i = 0; i < window._twViewerPdfApps.length; i++) {\n if (window._twViewerPdfApps[i].id === id) {\n index = i;\n break;\n }\n }\n\n if (index > -1) {\n window._twViewerPdfApps.splice(index, 1);\n }\n};\n\nwindow.TWPdfViewerUtil.addViewer = function (viewer) {\n window._twViewerPdfApps.push(viewer);\n};\n\n/**\n * @returns {TWViewerPdfApp[]} List of active PDF Viewers\n */\nwindow.TWPdfViewerUtil.getActiveViewers = function () {\n return window._twViewerPdfApps;\n};\n\n/**\n * Get the viewer for the given id.\n * @param {string} id\n * @returns TWViewerPdfApp\n */\nwindow.TWPdfViewerUtil.getViewer = function (id) {\n //\n for (let i = 0; i < window._twViewerPdfApps.length; i++) {\n if (window._twViewerPdfApps[i].id === id) {\n return window._twViewerPdfApps[i];\n }\n }\n return null;\n};\n\n/**\n * Change the theme of the viewer.\n * It will change a theme for all the viewers on the page.\n * @param {string} themeName - Name of the built-in theme.\n * @see TWPdfViewerUtil.getBuiltInThemes\n */\nwindow.TWPdfViewerUtil.changeThemeByName = function (themeName) {\n console.log(\"TWPdfViewerUtil.changeThemeByName\", themeName);\n const link = document.getElementById(\"tw-web-theme\");\n const isStylesheet =\n link && link.tagName === \"LINK\" && link.rel === \"stylesheet\";\n if (isStylesheet) {\n if (!frontEnd) {\n link.href = `/_content/Terminalworks.PdfViewer.AspNetCore/css/themes/${themeName}/tw-pdf-viewer-theme.css`;\n } else {\n link.href = `css/themes/${themeName}/tw-pdf-viewer-theme.css`;\n }\n } else {\n console.error(\n \" stylesheet element with id='tw-web-theme' was not found.\"\n );\n }\n};\n\n/**\n * Change the theme of the viewer.\n * It will change a theme for all the viewers on the page.\n * @param {string} srcUrl - URL of the theme\n */\nwindow.TWPdfViewerUtil.changeThemeBySrcUrl = function (srcUrl) {\n console.log(\"TWPdfViewerUtil.changeThemeBySrcUrl\", srcUrl);\n const link = document.getElementById(\"tw-web-theme\");\n const isStylesheet =\n link && link.tagName === \"LINK\" && link.rel === \"stylesheet\";\n if (isStylesheet) {\n link.href = srcUrl;\n } else {\n console.error(\n \" stylesheet element with id='tw-web-theme' was not found.\"\n );\n }\n};\n\nfunction onLoadDocument(event) {\n const viewersDiv = document.getElementsByClassName(\n \"tw2018elem_mainContainer\"\n );\n for (let i = 0; i < viewersDiv.length; i++) {\n const viewerDiv = viewersDiv[i];\n if (window.TWPdfViewerUtil.getViewer(viewerDiv.id)) {\n // already initialized, do nothing\n continue;\n }\n const isStatic =\n viewerDiv.dataset.static && viewerDiv.dataset.static === \"Yes\";\n if (frontEnd || isStatic) {\n if (tryToConnectTWViewer(viewerDiv)) {\n const viewerJS = window.TWPdfViewerUtil.getViewer(viewerDiv.id);\n\n if (viewerJS.options.documentUrl) {\n window.loadTWViewerDocument(\n viewerDiv.id,\n viewerJS.options.documentUrl,\n viewerJS.options.password\n );\n }\n }\n }\n }\n if (frontEnd) {\n return;\n }\n if (!TWobserver) {\n activateMutationObserver();\n }\n // za sada staviti da je uvjet da ako zeli za static ucitati automatski\n // dokument, tada treba staviti isStatic=\"Yes\" ili omoguciti mu da moze\n // nekako preko JS pozvati loadDocument\n // activateFallBackMechanism();\n}\n\n/* function activateFallBackMechanism() {\n// fallback mechanism - if not explicity dataset.static='Yes'\n// we need to wait for server to call tryToAddTWViewer if Server\n// or ServerPrendered.\n// Otherwise, after max. 3 seconds it will try to add TWViewer instances\n// if\nlet timeout = 0;\nconst interval = this.setInterval(function () {\n if (isTWConnected) {\n clearInterval(interval);\n return;\n }\n timeout += 100;\n if (timeout > 3000) {\n if (!isTWConnected) {\n window.tryToAddTWViewer();\n }\n clearInterval(interval);\n }\n}, 100);\n} */\n\nfunction activateMutationObserver() {\n const targetNode = document.body;\n\n // Options for the observer (which mutations to observe)\n const config = {\n attributes: true,\n childList: true,\n subtree: true,\n characterData: true,\n };\n\n // Create an observer instance linked to the callback function\n TWobserver = new MutationObserver(mutationCallback);\n\n // Start observing the target node for configured mutations\n TWobserver.observe(targetNode, config);\n\n // Later, you can stop observing\n // TWobserver.disconnect();\n}\n\nwindow.connectTWViewer = id => {\n const viewerDiv = document.getElementById(id);\n if (!viewerDiv) {\n console.error(`Viewer div with ${id} not found.`);\n return;\n }\n\n const optionsVal = viewerDiv.dataset.options;\n const options = JSON.parse(optionsVal);\n window.TWPdfViewerUtil.addViewer(new TWViewerPdfApp(options, viewerDiv));\n};\n\n// Callback function to execute when mutations are observed\nconst mutationCallback = function (mutationsList, observer) {\n // Use traditional 'for loops' for IE 11\n for (let i = 0; i < mutationsList.length; i++) {\n const mutation = mutationsList[i];\n if (mutation.type !== \"childList\") {\n // console.log(mutation.type);\n return;\n }\n\n if (mutation.removedNodes.length > 0) {\n for (let j = 0; j < mutation.removedNodes.length; j++) {\n const removed = mutation.removedNodes[j];\n if (removed.className === \"tw2018elem_mainContainer\") {\n console.log(`tw2018elem_mainContainer with id ${removed.id} removed`);\n if (window.twViewerPdfApps && window.twViewerPdfApps[removed.id]) {\n window.twViewerPdfApps[removed.id] = null;\n }\n /* const viewerDiv = document.getElementById(removed.id);\n if (viewerDiv) {\n tryToConnectTWViewer(viewerDiv);\n }\n */\n }\n }\n }\n\n if (mutation.addedNodes.length > 0) {\n for (let k = 0; k < mutation.addedNodes.length; k++) {\n const added = mutation.addedNodes[k];\n // console.log(\"added node\", added.className, added);\n if (added.className === \"tw2018elem_mainContainer\") {\n console.log(`tw2018elem_mainContainer with id ${added.id} added`);\n tryToConnectTWViewer(added);\n }\n }\n }\n }\n};\n\nfunction tryToConnectTWViewer(viewerDiv) {\n const height = viewerDiv.getBoundingClientRect().height;\n if (height > 0) {\n window.connectTWViewer(viewerDiv.id);\n return true;\n }\n activateSizeResizeObserver(viewerDiv);\n return false;\n}\n\nfunction activateSizeResizeObserver(div) {\n // dodan je, ali nije jos dobro iscrtan\n new ResizeObserver(function (mutations) {\n if (mutations[0].contentRect.height > 0) {\n this.disconnect();\n window.connectTWViewer(mutations[0].id);\n }\n }).observe(div);\n}\n\n// sluzi samo za privremeni test\nwindow.showTWLog = msg => {\n console.log(\"showTWLog\", msg);\n const viewersDiv = document.getElementsByClassName(\n \"tw2018elem_mainContainer\"\n );\n for (let i = 0; i < viewersDiv.length; i++) {\n const viewerDiv = viewersDiv[i];\n const viewerContainer = viewerDiv.getElementsByClassName(\n \"tw2018elem_viewerContainer\"\n )[0];\n const height = viewerContainer.getBoundingClientRect().height;\n console.log(\"viewerContainer height\", height);\n }\n // window.returnArrayAsync();\n};\n\nwindow.initMissingTWViewerDocument = id => {\n const viewerJS = window.TWPdfViewerUtil.getViewer(id);\n if (!viewerJS) {\n const viewerDiv = document.getElementById(id);\n if (viewerDiv) {\n tryToConnectTWViewer(viewerDiv);\n }\n }\n};\n\nwindow.loadTWViewerDocument = (id, documentUrl, password) => {\n const viewerJS = window.TWPdfViewerUtil.getViewer(id);\n viewerJS.loadDocumentFromUrl(documentUrl, password);\n};\n\nwindow.addEventListener(\"load\", function (event) {\n console.log(\"in load\");\n onLoadDocument(event);\n});\n\n// ponekad se load event dogodi prije nego li dodje\n// do tuda pa zato uvijek ovo zovem\n// if (frontEnd) {\nonLoadDocument();\n// }\n","/* Copyright 2016 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* globals module, __non_webpack_require__ */\n\n\"use strict\";\n\nlet pdfjsLib;\nif (typeof window !== \"undefined\" && window[\"pdfjs-dist/build/pdf\"]) {\n pdfjsLib = window[\"pdfjs-dist/build/pdf\"];\n} else {\n pdfjsLib = __non_webpack_require__(\"../build/pdf.js\");\n}\nmodule.exports = pdfjsLib;\n","/* eslint-disable prettier/prettier */\nimport { BookmarkLayer } from \"./bookmarks.js\";\nimport { CSS_UNITS } from \"./ui_utils.js\";\nimport { DownloadManager } from \"./download_manager.js\";\nimport { getDocument } from \"./pdfjs-lib.js\";\nimport { MessageBox } from \"./message_box.js\";\nimport { MultiViewer } from \"./multi_viewer.js\";\nimport { OverlayManager } from \"./overlay_manager.js\";\nimport { PasswordPrompt } from \"./password_prompt.js\";\nimport { PDFDocumentProperties } from \"./pdf_document_properties.js\";\nimport { PDFLinkService } from \"./pdf_link_service.js\";\nimport { PdfPrintService } from \"./pdf_print_service.js\";\n\nimport { SingleViewer } from \"./single_viewer.js\";\nimport { TextSelectionOptions } from \"./text_selection_options.js\";\n\nimport { Toolbar } from \"./toolbar.js\";\nimport { TWPdfDocument } from \"./pdf_document.js\";\n\nimport { ViewerType } from \"./base_viewer.js\";\n\n// eslint-disable-next-line sort-imports\nimport {\n MIN_Y_OFFSET,\n tw2018func_getPDFFileNameFromURL,\n tw_focus,\n} from \"./util.js\";\n\nimport { ZoomService } from \"./zoom_service.js\";\n\n/**\n * TWViewerPdfApp is the main class for the viewer application.\n */\nclass TWViewerPdfApp {\n constructor(options, mainDiv) {\n this._setElements(mainDiv);\n this.overlayManager = new OverlayManager();\n\n this._totalInit = 0;\n this._initialPageNumber = options.initialPageNumber || 1;\n\n this._totalRendered = 0;\n this._printService = null;\n this._isMobile = false;\n this.texts = this._setTexts();\n this._msgBox = new MessageBox({\n overlayName: \"tw2018elem_messageOverlay\",\n container: this.elements.tw2018elem_messageOverlay,\n app: this,\n });\n\n this._showErrorPopup = options.showErrorPopup || false;\n\n this._documentProperties = {\n app: this,\n overlayName: \"tw2018elem_documentPropertiesOverlay\",\n container: this.elements.tw2018elem_documentPropertiesOverlay,\n closeButton: this.elements.tw2018elem_documentPropertiesClose,\n fields: {\n fileName: this.elements.tw2018elem_fileNameField,\n fileSize: this.elements.tw2018elem_fileSizeField,\n title: this.elements.tw2018elem_titleField,\n author: this.elements.tw2018elem_authorField,\n subject: this.elements.tw2018elem_subjectField,\n keywords: this.elements.tw2018elem_keywordsField,\n creationDate: this.elements.tw2018elem_creationDateField,\n modificationDate: this.elements.tw2018elem_modificationDateField,\n creator: this.elements.tw2018elem_creatorField,\n producer: this.elements.tw2018elem_producerField,\n version: this.elements.tw2018elem_versionField,\n pageCount: this.elements.tw2018elem_pageCountField,\n pageSize: this.elements.tw2018elem_pageSizeField,\n },\n };\n this._pdfDocumentProperties = new PDFDocumentProperties(\n this._documentProperties\n );\n\n this._activePasswordPrompt = null;\n\n this.downloadManager = new DownloadManager();\n this.linkService = new PDFLinkService();\n\n /**\n * Bookmark layer manager\n * @member {BookmarkLayer}\n */\n this.bookmarkLayer = new BookmarkLayer(\n this,\n options.bookmark.showBookmarksOnOpen,\n options.bookmark.preserveBookmarksState,\n options.bookmark.bookmarksFullyExpanded\n );\n\n /**\n * @member {HTMLdivElement} - The main container for the viewer app.\n */\n this.viewerDiv = mainDiv;\n\n /**\n * @member {number} - Id of the viewer app.\n */\n this.id = mainDiv.id;\n\n /**\n * @member {object} - Initial viewer app options.\n */\n this.options = options;\n\n this.viewer =\n options.viewerType === ViewerType.SINGLE_VIEW\n ? new SingleViewer(this)\n : new MultiViewer(this);\n\n /**\n * @member {PDFDocument} - The loaded PDF document.\n */\n this.pdfDocument = new TWPdfDocument();\n\n /**\n * @member {TextSelectionOptions} - Text selection options.\n */\n this.textSelectionOptions = new TextSelectionOptions(this);\n this.textSelectionOptions.disabled = options.textSelectionDisabled || false;\n\n this.visibleAreaHeight =\n this.elements.tw2018elem_viewerContainer.getBoundingClientRect().height;\n this.visibleAreaWidth =\n this.elements.tw2018elem_viewerContainer.getBoundingClientRect().width;\n\n this._isMobile = this.isMobile;\n if (!this._isMobile) {\n this.elements.tw2018elem_bookmarksDivDesktop.style.height =\n this.elements.tw2018elem_viewerContainer.getBoundingClientRect()\n .height -\n 1 +\n \"px\";\n }\n\n /**\n * @member {ZoomService} - Zoom service.\n */\n this.zoomService = new ZoomService(\n this,\n options.zoom.zoomValue,\n options.zoom.isZoomFitToPage,\n this.texts.zoom_actual_size,\n this.texts.zoom_page_level\n );\n\n /**\n * @member {Toolbar} - Toolbar.\n */\n this.toolbar = new Toolbar(this, options, this.zoomService);\n\n this._bindEvents();\n this.dispatchTWEvent(\"twWiewerInitialized\", { app: this }, document);\n }\n\n // #region private functions\n _bindEvents() {\n window.addEventListener(\"resize\", this._viewerContainerResize.bind(this));\n\n const me = this;\n this.elements.tw2018elem_fileInput.addEventListener(\n \"change\",\n function (evt) {\n me.loadDocumentFromClick(me.elements.tw2018elem_fileInput.files[0]);\n }\n );\n\n this.elements.tw2018elem_mainContainer.addEventListener(\n \"dragover\",\n function (event) {\n event.preventDefault();\n }\n );\n\n this.elements.tw2018elem_mainContainer.addEventListener(\n \"drop\",\n function (ev) {\n ev.preventDefault();\n if (ev.dataTransfer.items) {\n // Use DataTransferItemList interface to access the file(s)\n for (let i = 0; i < ev.dataTransfer.items.length; i++) {\n // If dropped items aren't files, reject them\n if (ev.dataTransfer.items[i].kind === \"file\") {\n const file = ev.dataTransfer.items[i].getAsFile();\n me.loadDocumentFromFile(file);\n }\n }\n } else {\n // Use DataTransfer interface to access the file(s)\n for (let i = 0; i < ev.dataTransfer.files.length; i++) {\n me.loadDocumentFromFile(ev.dataTransfer.files[i]);\n }\n }\n }\n );\n\n this.elements.tw2018elem_viewerContainer.addEventListener(\n \"mousewheel\",\n this._mouseWheelHandler.bind(this),\n false\n ); // IE9. Chrome, Safari, Opera\n this.elements.tw2018elem_viewerContainer.addEventListener(\n \"DOMMouseScroll\",\n this._mouseWheelHandler.bind(this),\n false\n ); // FF\n this.elements.tw2018elem_viewerContainer.addEventListener(\n \"scroll\",\n this._multiViewScroll.bind(this)\n );\n\n this.elements.tw2018elem_passwordPromptField.addEventListener(\n \"keydown\",\n function (event) {\n switch (event.keyCode) {\n case 13: // Enter\n me.elements.tw2018elem_passwordPromptOKBtn.click();\n break;\n case 27: // Escape\n me.elements.tw2018elem_activePasswordPrompt.hide();\n }\n }\n );\n }\n\n _showDocumentLoading(val) {\n this.elements.tw2018elem_viewerContainer.classList.toggle(\n \"tw2018css_loading\",\n val\n );\n }\n\n _activateView(viewer) {\n const currentViewerSettings = this.viewer.getCurrentSettings();\n this.viewer = viewer;\n this.viewer.applySettings(currentViewerSettings);\n this.pdfDocument.resetTextLayer();\n this.toolbar.setFindController();\n this.toolbar.findBar.reset();\n this.linkService.setViewer(this.viewer);\n this.zoomService.calculateZoom();\n this.zoomService.executeZoom(false);\n this.viewer.show();\n }\n\n _setElements(mainDiv) {\n const elementsClass = [\n \"tw2018elem_zoominBtn\",\n \"tw2018elem_zoomoutBtn\",\n \"tw2018elem_bookmarksDivMobile\",\n \"tw2018elem_bookmarksDivDesktop\",\n \"tw2018elem_viewerContainer\",\n \"tw2018elem_toolbar\",\n \"tw2018elem_passwordPromptOverlay\",\n \"tw2018elem_passwordPromptField\",\n \"tw2018elem_passwordPromptDiv\",\n \"tw2018elem_passwordPromptOKBtn\",\n \"tw2018elem_passwordPromptCancelBtn\",\n \"tw2018elem_activePasswordPrompt\",\n \"tw2018elem_totalPages\",\n \"tw2018elem_pageNumber\",\n \"tw2018elem_findMsgClose\",\n \"tw2018elem_findOptionsClose\",\n \"tw2018elem_openBtn\",\n \"tw2018elem_previousvisitedBtn\",\n \"tw2018elem_nextvisitedBtn\",\n \"tw2018elem_searchTerm\",\n \"tw2018elem_searchBtn\",\n \"tw2018elem_printBtn\",\n \"tw2018elem_documentinfoBtn\",\n \"tw2018elem_optionsBtn\",\n \"tw2018elem_searchOptions\",\n \"tw2018elem_downloadBtn\",\n \"tw2018elem_closeBtn\",\n \"tw2018elem_zoomDropDown\",\n \"tw2018elem_zoomDropDownValue\",\n \"tw2018elem_zoomValues\",\n \"tw2018elem_zoomValuesDropDown\",\n \"tw2018elem_zoomValuesDropDownClose\",\n \"tw2018elem_counterclockwiseBtn\",\n \"tw2018elem_clockwiseBtn\",\n \"tw2018elem_bookmarkBtn\",\n \"tw2018elem_zoomDropDownArrow\",\n \"tw2018elem_nextpageBtn\",\n \"tw2018elem_previouspageBtn\",\n \"tw2018elem_singlepageBtn\",\n \"tw2018elem_multipageBtn\",\n \"tw2018elem_sepTotalPages\",\n \"tw2018elem_searchDiv\",\n \"tw2018elem_multiViewer\",\n \"tw2018elem_singleViewer\",\n \"tw2018elem_messageOverlay\",\n \"tw2018elem_documentPropertiesOverlay\",\n \"tw2018elem_documentPropertiesClose\",\n \"tw2018elem_fileNameField\",\n \"tw2018elem_fileSizeField\",\n \"tw2018elem_titleField\",\n \"tw2018elem_authorField\",\n \"tw2018elem_subjectField\",\n \"tw2018elem_keywordsField\",\n \"tw2018elem_creationDateField\",\n \"tw2018elem_modificationDateField\",\n \"tw2018elem_creatorField\",\n \"tw2018elem_producerField\",\n \"tw2018elem_versionField\",\n \"tw2018elem_pageCountField\",\n \"tw2018elem_pageSizeField\",\n \"tw2018elem_bookmarksDivFrame\",\n \"tw2018elem_bookmarksDiv\",\n \"tw2018elem_msgClose\",\n \"tw2018elem_msg\",\n \"tw2018elem_msgBox\",\n \"tw2018elem_printCanvas\",\n \"tw2018elem_printLayer\",\n \"tw2018elem_findHighlightAll\",\n \"tw2018elem_findMatchCase\",\n \"tw2018elem_findMsg\",\n \"tw2018elem_findMsgBox\",\n \"tw2018elem_findWholeWord\",\n \"tw2018elem_findResultsCount\",\n \"tw2018elem_previousfindBtn\",\n \"tw2018elem_nextfindBtn\",\n \"tw2018elem_searchBtn\",\n \"tw2018elem_searchResult\",\n \"tw2018elem_findResultCurrent\",\n \"tw2018elem_pageNumberDiv\",\n \"tw2018elem_fileInput\",\n \"tw2018elem_bookmarkPopupOverlay\",\n \"tw2018elem_bookmarkPopup\",\n \"tw2018elem_bookmarkPopupClose\",\n \"tw2018elem_texts\",\n \"tw2018elem_WrongPasswordMsg\",\n ];\n\n this.elements = {};\n for (let i = 0; i < elementsClass.length; i++) {\n this.elements[elementsClass[i]] = mainDiv.getElementsByClassName(\n elementsClass[i]\n )[0];\n }\n\n this.elements.tw2018elem_mainContainer = mainDiv;\n }\n\n _setTexts() {\n const texts = {};\n const textItems = this.elements.tw2018elem_texts.getElementsByTagName(\"li\");\n for (let i = 0; i < textItems.length; i++) {\n texts[textItems[i].dataset.key] = textItems[i].innerText;\n }\n return texts;\n }\n\n _mouseWheelHandler(e) {\n if (!e.ctrlKey || !this._scrollEnabled) {\n return;\n }\n\n this.zoomService.mouseWheelHandler(e);\n e.preventDefault();\n }\n\n _pageInitialized() {\n this._totalInit++;\n if (this._totalInit === this.viewer.pdfDoc.numPages) {\n this._allPagesInitialized();\n }\n }\n\n _pageRendered(pageNum) {\n this.dispatchTWEvent(\n \"pageRendered\",\n {\n pageNum,\n doc: this.pdfDocument,\n },\n this.viewerDiv\n );\n\n this._totalRendered++;\n if (this._totalRendered >= this.viewer.visiblePagesCount) {\n this._allPagesRendered();\n }\n }\n\n _allPagesRendered() {\n this._totalRendered = 0;\n if (!this.viewer.pdfDoc) {\n return;\n }\n\n if (\n this.viewer.type === ViewerType.MULTI_VIEW &&\n this.viewer.pdfDoc.numPages > 1\n ) {\n const lastPage = document.getElementById(\n this.id + \"page\" + this.viewer.pdfDoc.numPages\n );\n\n if (\n lastPage.getBoundingClientRect().height + lastPage.offsetTop <\n this.visibleAreaHeight\n ) {\n const firstPage = document.getElementById(this.id + \"page1\");\n let totalHeight = firstPage.getBoundingClientRect().height + 10;\n\n for (let i = 2; i <= this.viewer.pdfDoc.numPages; i++) {\n totalHeight +=\n 10 +\n document\n .getElementById(this.id + \"page\" + i)\n .getBoundingClientRect().height;\n }\n\n const topPos = (this.visibleAreaHeight - totalHeight - 10) / 2;\n firstPage.style.marginTop = topPos + \"px\";\n firstPage.style.top = 10;\n }\n }\n this.dispatchTWEvent(\n \"allVisiblePagesRendered\",\n { doc: this.pdfDocument },\n this.viewerDiv\n );\n }\n\n _initializeAllPages() {\n this._totalInit = 0;\n const me = this;\n for (let i = 1; i <= this.viewer.pdfDoc.numPages; i++) {\n const tempPageNum = i;\n const pagePromise = me.viewer.pdfDoc.getPage(tempPageNum);\n pagePromise\n .then(function (page) {\n me.pdfDocument.pages[tempPageNum - 1] = page;\n page.status = \"\";\n const viewport = page.getViewport({\n scale: 1 * CSS_UNITS,\n rotation: me.viewer.pagesRotation,\n });\n page.originalHeight = viewport.height;\n page.originalWidth = viewport.width;\n me._pageInitialized();\n })\n .catch(function (err) {\n console.error(\"_initalizeAllPages\", err);\n });\n }\n }\n\n _multiViewScroll() {\n if (this.viewer.type === ViewerType.SINGLE_VIEW) {\n return; // no effect for single view\n }\n\n if (!this._scrollEnabled) {\n return;\n }\n\n const pageNum = this.viewer.getCurrentVisiblePage();\n this.viewer.currentPageNumber = pageNum;\n this.viewer.renderVisiblePages();\n this.toolbar.updateStatus(pageNum);\n this.elements.tw2018elem_pageNumber.value = pageNum;\n }\n\n _setPageSizesInfo() {\n const pagesSizeInfo = {\n maxWidth: 0,\n totalHeight: 0,\n numberOfBiggestPage: 0,\n };\n\n let minZoomFactor = 999999;\n for (let i = 0; i < this.pdfDocument.pages.length; i++) {\n const page = this.pdfDocument.pages[i];\n if (!page) {\n console.warn(\"setPageSizeInfo - page not available\", page);\n return;\n }\n\n const zoomFactorWidth = this.visibleAreaWidth / page.originalWidth;\n const zoomFactorHeight = this.visibleAreaHeight / page.originalHeight;\n\n const pageZoom =\n zoomFactorWidth < zoomFactorHeight ? zoomFactorWidth : zoomFactorHeight;\n\n if (pageZoom <= minZoomFactor) {\n minZoomFactor = pageZoom;\n pagesSizeInfo.numberOfBiggestPage = i + 1;\n }\n\n pagesSizeInfo.totalHeight += MIN_Y_OFFSET;\n pagesSizeInfo.totalHeight += page.originalHeight;\n\n if (page.originalWidth > pagesSizeInfo.maxWidth) {\n pagesSizeInfo.maxWidth = page.originalWidth;\n }\n }\n pagesSizeInfo.totalHeight += MIN_Y_OFFSET;\n this.pdfDocument.pagesSizeInfo = pagesSizeInfo;\n }\n\n _loadDocument(pdfDoc, url) {\n this.viewer.pdfDoc = pdfDoc;\n this.viewer.currentPageNumber = 1;\n this.viewer.tempPageNumber = 1;\n this.pdfDocument.pages = new Array(this.viewer.pdfDoc.numPages);\n this._pdfDocumentProperties.setDocument(pdfDoc, url);\n this.toolbar.setFindController();\n this.linkService.setDocument(pdfDoc);\n this.linkService.setViewer(this.viewer);\n this._initializeAllPages(); // async\n this._scrollEnabled = true;\n }\n\n _loadDocumentError(reason, url, file, evt, passwordCallback) {\n this._showDocumentLoading(false);\n if (reason.name === \"PasswordException\") {\n if (!this._activePasswordPrompt) {\n this._activePasswordPrompt = new PasswordPrompt({\n callback: passwordCallback,\n url,\n evt,\n file,\n app: this,\n container: this.elements.tw2018elem_passwordPromptOverlay,\n overlayName: \"tw2018elem_passwordPromptOverlay\",\n passwordField: this.elements.tw2018elem_passwordPromptField,\n passwordPromptDiv: this.elements.tw2018elem_passwordPromptDiv,\n showInvalidPassword: false,\n invalidPasswordText: this.elements.tw2018elem_WrongPasswordMsg,\n });\n } else {\n if (this._activePasswordPrompt.isNewDocument) {\n this._activePasswordPrompt.isNewDocument = false;\n } else {\n this._activePasswordPrompt.showInvalidPassword = true;\n }\n }\n\n this._activePasswordPrompt.open();\n return;\n }\n\n let error = this.texts.load_document_error;\n const reasonTxt = !reason.name ? this.texts.unknown_error : reason.message;\n error += \" \" + reasonTxt;\n\n if (this._showErrorPopup) {\n this.showError(error);\n }\n\n this.dispatchTWEvent(\n \"loadDocumentError\",\n {\n reason: reasonTxt,\n url,\n file,\n evt,\n },\n this.viewerDiv\n );\n }\n\n _viewerContainerResize() {\n if (\n this.elements.tw2018elem_optionsBtn.classList.contains(\n \"tw2018css_focused\"\n )\n ) {\n tw_focus(this.elements.tw2018elem_optionsBtn, false);\n this.elements.tw2018elem_searchOptions.classList.add(\"tw2018css_hidden\");\n }\n\n this.setElementsSize();\n }\n\n _allPagesInitialized() {\n this.bookmarkLayer.reset();\n this.bookmarkLayer.loadBookmarks();\n\n this._totalInit = 0;\n if (this._initialPageNumber) {\n if (\n this.viewer.pdfDoc.numPages >= this._initialPageNumber &&\n this._initialPageNumber > 0\n ) {\n this.viewer.tempPageNumber = this._initialPageNumber;\n this.viewer.currentPageNumber = this._initialPageNumber;\n }\n this._initialPageNumber = 0;\n }\n\n this._setPageSizesInfo();\n if (!this.zoomService.useInitialZoomValueIfSet()) {\n this.renderPdfDocInViewer();\n }\n\n this.dispatchTWEvent(\n \"allPagesInitialized\",\n {\n doc: this.pdfDocument,\n },\n this.viewerDiv\n );\n this._showDocumentLoading(false);\n // this.showMsg(\"Document is opened.\", \"info\");\n }\n\n _resetPasswordPrompt() {\n if (this._activePasswordPrompt) {\n this._activePasswordPrompt.reset();\n }\n }\n // #endregion\n\n // #region internal functions\n setElementsSize() {\n if (this.viewer.pdfDoc) {\n if (this.isMobile !== this._isMobile) {\n this._isMobile = this.isMobile;\n this.bookmarkLayer.show(false);\n }\n\n if (!this._isMobile) {\n this.elements.tw2018elem_bookmarksDivDesktop.style.height =\n this.elements.tw2018elem_viewerContainer.getBoundingClientRect()\n .height -\n 1 +\n \"px\";\n }\n }\n\n this.visibleAreaHeight =\n this.elements.tw2018elem_viewerContainer.getBoundingClientRect().height;\n let bookmarkDivWidth = 0;\n if (this.viewer.pdfDoc) {\n bookmarkDivWidth = this._isMobile\n ? 0\n : this.elements.tw2018elem_bookmarksDivDesktop.getBoundingClientRect()\n .width;\n\n if (\n this.elements.tw2018elem_bookmarksDivDesktop.style.display !==\n \"inline-block\"\n ) {\n bookmarkDivWidth = 0;\n }\n }\n\n this.visibleAreaWidth =\n this.elements.tw2018elem_toolbar.getBoundingClientRect().width -\n bookmarkDivWidth;\n this.elements.tw2018elem_viewerContainer.style.width =\n this.visibleAreaWidth + \"px\";\n\n if (this.viewer.pdfDoc) {\n this.zoomService.fitToPageIfNeeded();\n if (this.zoomService.zoomDropDownOpened) {\n this.zoomService.showZoomDropDown();\n }\n }\n }\n\n loadDocumentFromClick(file, password) {\n this.loadDocumentFromFile(file, password);\n this.elements.tw2018elem_fileInput.type = \"\";\n this.elements.tw2018elem_fileInput.value = \"\";\n this.elements.tw2018elem_fileInput.type = \"file\";\n }\n\n dispatchTWEvent(name, details, target) {\n const twEvent = new CustomEvent(name, { detail: details });\n target.dispatchEvent(twEvent);\n }\n\n get isMobile() {\n const mainWidth =\n this.elements.tw2018elem_mainContainer.getBoundingClientRect().width;\n return mainWidth < 560;\n }\n\n renderPdfDocInViewer() {\n this.elements.tw2018elem_totalPages.textContent =\n this.viewer.pdfDoc.numPages;\n if (this.viewer.tempPageNumber !== 0) {\n // we want to return to the same page it was before zoom, rotate operation\n this.viewer.currentPageNumber = this.viewer.tempPageNumber;\n this.viewer.tempPageNumber = 0;\n }\n\n const currentViewerSettings = this.viewer.getCurrentSettings();\n this.viewer.dispose();\n this.viewer =\n this.viewer.type === ViewerType.MULTI_VIEW\n ? new MultiViewer(this)\n : new SingleViewer(this);\n this.viewer.applySettings(currentViewerSettings);\n this.linkService.setViewer(this.viewer);\n this.elements.tw2018elem_pageNumber.value = this.viewer.currentPageNumber;\n this.toolbar.findBar.reset();\n this.zoomService.calculateZoom();\n this.toolbar.enableToolbar(true);\n this.viewer.show();\n }\n // #endregion\n\n // #region public functions\n /**\n * Opens a file dialog and loads the selected PDF file.\n */\n openThroughDialog() {\n this.elements.tw2018elem_fileInput.click();\n }\n\n /**\n * Current page number.\n * @returns {number}\n */\n get currentPageNumber() {\n return this.viewer.currentPageNumber;\n }\n\n /**\n * Shows the error message.\n * @param {string} error - The error message.\n */\n showError(error) {\n console.log(error);\n if (this._showErrorPopup) {\n this.showMsg(error, \"error\");\n }\n }\n\n /**\n * Shows the message.\n * @param {string} msg - The message to show.\n * @param {string} type - Available values: \"info\", \"error\".\n */\n showMsg(msg, type) {\n this._msgBox.open(msg, type);\n }\n\n /**\n * Prints the document by opening a new window.\n */\n print() {\n const printWin = window.open(\n \"\",\n \"\",\n \"width=\" + screen.availWidth + \",height=\" + screen.availHeight\n );\n if (!printWin) {\n const error = this.texts.direct_printing_popup;\n this.showError(error);\n console.error(error);\n return;\n }\n\n this._printService = new PdfPrintService(this);\n this._printService.printWin = printWin;\n const me = this;\n this._printService.renderPrintPages().then(function () {\n if (me._printService.printingCanceled) {\n me.dispatchTWEvent(\n \"printingCanceled\",\n { doc: me.pdfDoc },\n me.viewerDiv\n );\n printWin.close();\n return;\n }\n\n me.dispatchTWEvent(\n \"allPagesRenderedForPrint\",\n { doc: me.pdfDoc },\n me.viewerDiv\n );\n\n printWin.focus();\n printWin.print();\n const isSafari =\n /constructor/i.test(window.HTMLElement) ||\n (function (p) {\n return p.toString() === \"[object SafariRemoteNotification]\";\n })(\n !window.safari ||\n (typeof window.safari !== \"undefined\" &&\n window.safari.pushNotification)\n );\n\n if (isSafari) {\n printWin.onafterprint = function (event) {\n printWin.close();\n };\n } else {\n printWin.close();\n }\n });\n }\n\n /**\n * Shows previously visited page from the history of the visited pages.\n */\n prevVisited() {\n this.viewer.prevVisited();\n }\n\n /**\n * Shows next visited page from the history of the visited pages.\n */\n nextVisited() {\n this.viewer.nextVisited();\n }\n\n /**\n * Shows the previous page.\n */\n previousPage() {\n if (this.viewer.currentPageNumber <= 1) {\n return;\n }\n\n this.viewer.currentPageNumber--;\n this.viewer.showPage(this.viewer.currentPageNumber);\n }\n\n /**\n * Shows the next page.\n */\n nextPage() {\n if (this.viewer.currentPageNumber >= this.viewer.pdfDoc.numPages) {\n return;\n }\n\n this.viewer.currentPageNumber++;\n this.viewer.showPage(this.viewer.currentPageNumber);\n }\n\n /**\n * Downloads the loaded document.\n */\n downloadDocument() {\n if (!this.pdfDocument) {\n return;\n }\n\n if (this.pdfDocument.documentFile) {\n this.downloadManager.downloadData(\n this.pdfDocument.documentFile,\n this.pdfDocument.documentName,\n \"application/pdf\"\n );\n } else {\n this.downloadManager.downloadUrl(\n this.pdfDocument.documentUrl,\n this.pdfDocument.documentName\n );\n }\n }\n\n /**\n * Shows the document properties.\n */\n showDocumentProperties() {\n this._pdfDocumentProperties.open();\n }\n\n /**\n * Close the document properties.\n */\n closeDocumentProperties() {\n this._pdfDocumentProperties.close();\n }\n\n /**\n * Activates the single-page view mode.\n */\n activateSinglePageView() {\n this._activateView(new SingleViewer(this));\n }\n\n /**\n * Activates the multi-page view mode.\n */\n activateMultiPageView() {\n this._activateView(new MultiViewer(this));\n }\n\n /**\n * Rotates the document by 90 degrees counter-clockwise.\n */\n rotateCounterClockwise() {\n this.viewer.pagesRotation -= 90;\n if (this.viewer.pagesRotation === -360) {\n this.viewer.pagesRotation = 0;\n }\n this.zoomService.executeZoom();\n }\n\n /**\n * Rotates the document by 90 degrees clockwise.\n */\n rotateClockwise() {\n this.viewer.pagesRotation += 90;\n if (this.viewer.pagesRotation === 360) {\n this.viewer.pagesRotation = 0;\n }\n this.zoomService.executeZoom();\n }\n\n /**\n * Opens the document's properties.\n */\n openDocumentProperties() {\n this._pdfDocumentProperties.open();\n }\n\n /**\n * Disables the text selection.\n * @param {boolean} val\n */\n disableSelection(val) {\n const textDivs =\n this.elements.tw2018elem_mainContainer.getElementsByClassName(\n \"tw2018css_textLayer\"\n );\n\n for (let i = 0; i < textDivs.length; i++) {\n textDivs[i].classList.toggle(\"tw2018css_disabled\", val);\n }\n }\n\n /**\n * Goes to the specified page.\n * @param {number} num - The page number.\n */\n gotoPage(num) {\n if (this.viewer.pdfDoc.numPages < num || num < 1) {\n return;\n }\n this.viewer.currentPageNumber = num;\n this.viewer.showPage(num);\n this.toolbar.updateStatus(num);\n }\n\n /**\n * Loads the document from the specified URL.\n * @param {string} url - The URL of the document.\n * @param {string} password - The password of the document.\n * @param {TWViewerPdfApp} app - The application.\n */\n loadDocumentFromUrl(url, password, app = this) {\n app._showDocumentLoading(true);\n app.releasePdfDoc();\n app.pdfDocument.documentUrl = url;\n app.pdfDocument.documentName = tw2018func_getPDFFileNameFromURL(url);\n const loadingTask = getDocument({ url, password });\n loadingTask.promise\n .then(pdfDoc => {\n app._loadDocument(pdfDoc, url);\n app._resetPasswordPrompt();\n })\n .catch(reason =>\n app._loadDocumentError(reason, url, null, null, app.loadDocumentFromUrl)\n );\n }\n\n /**\n * Loads the document from the specified file.\n * @param {file} file - The file of the document.\n * @param {string} password - The password of the document.\n * @param {TWViewerPdfApp} app - The application.\n */\n loadDocumentFromFile(file, password, app = this) {\n app._showDocumentLoading(true);\n app.toolbar.enableToolbar(false);\n app.viewer.dispose();\n app.bookmarkLayer.reset();\n const fileReader = new FileReader();\n fileReader.onload = evt1 => {\n const buffer = evt1.target.result;\n app.releasePdfDoc();\n app.pdfDocument.documentFile = file;\n app.pdfDocument.documentName = file.name;\n const loadingTask = getDocument({\n data: new Uint8Array(buffer),\n password,\n });\n loadingTask.promise\n .then(pdfDoc => {\n app._loadDocument(pdfDoc, \"\");\n app._resetPasswordPrompt();\n })\n .catch(reason =>\n app._loadDocumentError(\n reason,\n \"\",\n file,\n evt1,\n app.loadDocumentFromFile\n )\n );\n };\n\n fileReader.readAsArrayBuffer(file);\n }\n\n /**\n * Returns the text content of the page.\n * @param {number} pageIndex Page index of the page. Numbering starts from 0.\n * @returns {string} The text content of the page.\n */\n getPageTextContent(pageIndex) {\n return this.viewer.getPageTextContent(pageIndex);\n }\n\n /**\n * Get currently loaded document name.\n * @returns {string}\n */\n getDocumentName() {\n return this.pdfDocument.name;\n }\n\n /**\n * Releases the loaded document.\n */\n releasePdfDoc() {\n if (this.viewer.pdfDoc) {\n this.toolbar.findBar.reset();\n this.bookmarkLayer.reset();\n this.bookmarkLayer.show(false);\n this.viewer.pdfDoc.cleanup();\n this.viewer.pdfDoc.destroy();\n this.viewer.pdfDoc = null;\n this.viewer.dispose();\n this._scrollEnabled = false;\n this.dispatchTWEvent(\"documentReleased\", {}, this.viewerDiv);\n }\n }\n // #endregion\n}\n\nexport { TWViewerPdfApp };\n","/* eslint-disable max-len */\n\nimport {\n TW_DATA_TAG,\n tw_disableBtn,\n tw_focus,\n tw_hide,\n tw_toggleCssClass,\n} from \"./util.js\";\n\n/**\n * Bookmarks manager\n */\nclass BookmarkLayer {\n constructor(\n app,\n showBookmarksOnOpen = false,\n preserveBookmarksState = true,\n bookmarksFullyExpanded = false\n ) {\n this._app = app;\n this._isBookmarksOpened = false;\n this._isResizeEventAdded = false;\n this._bindEvents();\n\n /**\n * All bookmarks items.\n */\n this.allBookmarks = [];\n\n /**\n * If *true*, on first open bookmarks it will show bookmarks fully expaned.\n * In next openings, if it will be expanded or collapsed depends on the property value\n * of *preserveBookmarksState*.\n *\n * Default false.\n * */\n this.bookmarksFullyExpanded = bookmarksFullyExpanded || false;\n\n /** If *false*, on every open bookmarks it will show bookmarks\n * fully expaned or collapsed based on the property value\n * of *bookmarksFullyExpanded*.\n *\n * Default: *true*\n * */\n this.preserveBookmarksState = preserveBookmarksState === false || true;\n\n /** If *true* it will automatically open bookmarks when the document\n * is loaded. If the document doesn't have bookmarks nothing will happen.\n *\n * Default: *false*\n * */\n this.showBookmarksOnOpen = showBookmarksOnOpen || false;\n }\n\n // #region private functions\n get _bookmarksDiv() {\n return this._app.isMobile\n ? this._app.elements.tw2018elem_bookmarksDivMobile\n : this._app.elements.tw2018elem_bookmarksDivDesktop;\n }\n\n _bindEvents() {\n const me = this;\n this._app.elements.tw2018elem_bookmarkBtn.addEventListener(\n \"click\",\n function (event) {\n if (!event.defaultPrevented) {\n me._toggle();\n }\n }\n );\n\n this._app.elements.tw2018elem_bookmarkPopupClose.addEventListener(\n \"click\",\n function (event) {\n me._toggle();\n event.preventDefault();\n }\n );\n }\n\n _showMobile(val) {\n this._app.elements.tw2018elem_bookmarkPopupOverlay.style.display = val\n ? \"flex\"\n : \"none\";\n }\n\n _showDesktop(val) {\n this._app.elements.tw2018elem_bookmarksDivDesktop.style.display = val\n ? \"inline-block\"\n : \"none\";\n if (!val) {\n this._app.elements.tw2018elem_viewerContainer.style.left = \"0\";\n } else {\n const bookmarkWidth =\n this._app.elements.tw2018elem_bookmarksDivDesktop.getBoundingClientRect()\n .width;\n this._app.elements.tw2018elem_viewerContainer.style.left =\n bookmarkWidth + \"px\";\n }\n\n this._app.setElementsSize();\n }\n\n _addBookmark(bookmark, parentDiv) {\n const outlineItem = document.createElement(\"div\");\n outlineItem.classList.add(\"tw2018css_outlineItem\");\n outlineItem.setAttribute(TW_DATA_TAG, \"\");\n const a = document.createElement(\"a\");\n a.setAttribute(\"href\", \"#\");\n a.innerText = bookmark.title;\n a.setAttribute(\"bookmarkId\", this.allBookmarks.length);\n this.allBookmarks.push(bookmark.dest);\n const me = this;\n a.onclick = function (event) {\n const id = parseInt(this.getAttribute(\"bookmarkId\"));\n me._app.linkService.navigateTo(me.allBookmarks[id]);\n event.preventDefault();\n if (me._app.isMobile) {\n me._toggle();\n }\n return false;\n };\n\n if (bookmark.items.length > 0) {\n const toggleDiv = document.createElement(\"div\");\n toggleDiv.classList.add(\"tw2018css_outlineItemToggler\");\n toggleDiv.setAttribute(TW_DATA_TAG, \"\");\n if (!this.bookmarksFullyExpanded) {\n toggleDiv.classList.add(\"tw2018css_outlineItemsHidden\");\n }\n\n toggleDiv.onclick = function () {\n me._toggleBookmark(this);\n };\n outlineItem.appendChild(toggleDiv);\n outlineItem.appendChild(a);\n const outlineItems = document.createElement(\"div\");\n outlineItems.classList.add(\"tw2018css_outlineItems\");\n outlineItems.setAttribute(TW_DATA_TAG, \"\");\n outlineItem.appendChild(outlineItems);\n for (let i = 0; i < bookmark.items.length; i++) {\n me._addBookmark(bookmark.items[i], outlineItems);\n }\n } else {\n outlineItem.classList.add(\"tw2018css_simple\");\n outlineItem.setAttribute(TW_DATA_TAG, \"\");\n outlineItem.appendChild(a);\n }\n parentDiv.appendChild(outlineItem);\n }\n\n _toggleBookmarks() {\n if (!this._bookmarksDiv) {\n return;\n }\n const itemTogglers = this._bookmarksDiv.getElementsByClassName(\n \"tw2018css_outlineItemToggler\"\n );\n for (let i = 0; i < itemTogglers.length; i++) {\n this._toggleBookmark(itemTogglers[i]);\n }\n }\n\n _resizeBookmarksDivFrame() {\n const bookmarkWidth = this._bookmarksDiv.getBoundingClientRect().width;\n this._app.elements.tw2018elem_viewerContainer.style.left =\n bookmarkWidth + \"px\";\n this._app.elements.tw2018elem_viewerContainer.style.width =\n this._app.elements.tw2018elem_mainContainer.getBoundingClientRect()\n .width -\n 2 -\n bookmarkWidth +\n \"px\";\n this._app.setElementsSize();\n }\n\n _addIFrameResizeHandlerIfNeeded() {\n if (!this._app.isMobile) {\n if (!this._isResizeEventAdded) {\n const me = this;\n if (this._app.elements.tw2018elem_bookmarksDivFrame.contentWindow) {\n this._app.elements.tw2018elem_bookmarksDivFrame.contentWindow.addEventListener(\n \"resize\",\n me._resizeBookmarksDivFrame.bind(me)\n );\n } else {\n // TODO check for IE11 -> multiple instances of app\n window.frames.tw2018elem_bookmarksDivFrame.addEventListener(\n \"resize\",\n me._resizeBookmarksDivFrame.bind(me)\n );\n }\n me._isResizeEventAdded = true;\n }\n }\n }\n\n _expandAll() {\n if (!this._bookmarksDiv) {\n return;\n }\n const itemTogglers = this._bookmarksDiv.getElementsByClassName(\n \"tw2018css_outlineItemToggler\"\n );\n for (let i = 0; i < itemTogglers.length; i++) {\n this._expandBookmarkItem(itemTogglers[i]);\n }\n }\n\n _expandBookmarkItem(div) {\n div.classList.remove(\"tw2018css_outlineItemsHidden\");\n }\n\n _closeBookmarkItem(div) {\n div.classList.add(\"tw2018css_outlineItemsHidden\");\n div.setAttribute(TW_DATA_TAG, \"\");\n }\n\n _toggleBookmark(div) {\n if (div.classList.contains(\"tw2018css_outlineItemsHidden\")) {\n this._expandBookmarkItem(div);\n } else {\n this._closeBookmarkItem(div);\n }\n }\n\n _toggle() {\n this.show(!this._isBookmarksOpened);\n if (this._app.isMobile) {\n tw_toggleCssClass(\n this._app.elements.tw2018elem_bookmarkPopupOverlay,\n \"tw2018elem_bookmarkPopupOverlayVisible\"\n );\n }\n }\n // #endregion\n\n // #region public functions\n\n /** Shows or hides bookmarks.\n * @param {boolean} val - true to show bookmarks, false to hide.\n */\n show(val) {\n if (!this._app.pdfDocument) {\n val = false;\n }\n\n if (this.allBookmarks.length === 0) {\n val = false;\n }\n\n /*\n if (this._isBookmarksOpened === val) {\n return;\n }\n */\n\n this._isBookmarksOpened = val;\n\n if (!val) {\n this._showMobile(val);\n this._showDesktop(val);\n } else {\n if (!this.preserveBookmarksState) {\n if (this.bookmarksFullyExpanded) {\n this._expandAll();\n }\n }\n\n if (this._app.isMobile) {\n this._showMobile(val);\n this._showDesktop(false);\n } else {\n this._showDesktop(val);\n this._showMobile(false);\n }\n }\n tw_focus(this._app.elements.tw2018elem_bookmarkBtn, val);\n }\n\n /**\n * Resets bookmarks and its GUI elements.\n * @ignore\n */\n reset() {\n this.allBookmarks = [];\n this._isBookmarksCompletelyOpen = false;\n this._isBookmarksOpened = false;\n\n if (!this._app.isMobile) {\n this._bookmarksDiv.innerHTML =\n \"\";\n this._app.elements.tw2018elem_bookmarksDivFrame =\n this._bookmarksDiv.children[0];\n this._isResizeEventAdded = false;\n }\n }\n\n _disableBookmarks() {\n tw_disableBtn(this._app.elements.tw2018elem_bookmarkBtn, true);\n tw_focus(this._app.elements.tw2018elem_bookmarkBtn, false);\n\n if (!this._app.isMobile) {\n tw_hide(this._bookmarksDiv);\n } else {\n tw_hide(this._app.elements.tw2018elem_bookmarkPopupOverlay);\n }\n this._app.elements.tw2018elem_viewerContainer.style.left = \"0\";\n }\n\n /**\n * Read all bookmarks (if they exist) from the PDF document and fill its value in related GUI elements.\n * @ignore\n */\n loadBookmarks() {\n this.allBookmarks = [];\n this._addIFrameResizeHandlerIfNeeded();\n\n const me = this;\n if (!me._app.viewer.pdfDoc) {\n me._disableBookmarks();\n return;\n }\n\n me._app.viewer.pdfDoc\n .getOutline()\n .then(function (destinations) {\n if (\n !destinations ||\n destinations.length === 0 ||\n destinations.length === 1\n ) {\n me._disableBookmarks();\n } else {\n tw_disableBtn(me._app.elements.tw2018elem_bookmarkBtn, false);\n\n for (let i = 0; i < destinations.length; i++) {\n me._addBookmark(\n destinations[i],\n me._app.elements.tw2018elem_bookmarksDivMobile\n );\n }\n\n for (let i = 0; i < destinations.length; i++) {\n me._addBookmark(\n destinations[i],\n me._app.elements.tw2018elem_bookmarksDivDesktop\n );\n }\n\n // me.isBookmarksCompletelyOpen = me.showBookmarksCompletelyOnOpen;\n me._isBookmarksOpened = me.showBookmarksOnOpen;\n me.show(me._isBookmarksOpened);\n }\n })\n .catch(function (error) {\n me._disableBookmarks();\n console.warn(\"Error while reading bookmarks: \" + error);\n });\n }\n}\n// #endregion\n\nexport { BookmarkLayer };\n","/* eslint-disable prettier/prettier */\nfunction tw2018func_cloneObj(obj) {\n const result = Object.create(null);\n for (const i in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, i)) {\n result[i] = obj[i];\n }\n }\n return result;\n}\n\nfunction tw_disableBtn(btn, disable) {\n btn.disabled = disable;\n if (disable && btn.children.length > 0 && btn.dataset.tooltipText) {\n btn.innerHTML = \"\";\n }\n}\n\nfunction tw_focus(elem, val) {\n if (val) {\n elem.classList.add(\"tw2018css_focused\");\n } else {\n elem.classList.remove(\"tw2018css_focused\");\n }\n}\n\nfunction tw_hide(elem) {\n elem.style.display = \"none\";\n}\n\nfunction tw_toggleCssClass(elem, cssClass) {\n if (elem.classList.contains(cssClass)) {\n elem.classList.remove(cssClass);\n } else {\n elem.classList.add(cssClass);\n }\n}\n\n/**\n * Gets the size of the specified page, converted from PDF units to inches.\n * @param {Object} An Object containing the properties: {Array} `view`,\n * {number} `userUnit`, and {number} `rotate`.\n * @return {Object} An Object containing the properties: {number} `width`\n * and {number} `height`, given in inches.\n */\nfunction tw2018func_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 to parse query string (e.g. ?param1=value&parm2=...).\n */\nfunction parseQueryString(query) {\n const parts = query.split(\"&\");\n const params = Object.create(null);\n for (let i = 0, ii = parts.length; i < ii; ++i) {\n const param = parts[i].split(\"=\");\n const key = param[0].toLowerCase();\n const value = param.length > 1 ? param[1] : null;\n params[decodeURIComponent(key)] = decodeURIComponent(value);\n }\n return params;\n}\n\nfunction tw2018func_isPortraitOrientation(size) {\n return size.width <= size.height;\n}\n/**\n * Returns the filename or guessed filename from the url (see issue 3455).\n * url {String} The original PDF location.\n * @return {String} Guessed PDF file name.\n */\nfunction tw2018func_getPDFFileNameFromURL(url) {\n const reURI = /^(?:([^:]+:)?\\/\\/[^/]+)?([^?#]*)(\\?[^#]*)?(#.*)?$/;\n // SCHEME HOST 1.PATH 2.QUERY 3.REF\n // Pattern to get last matching NAME.pdf\n const reFilename = /[^/?#=]+\\.pdf\\b(?!.*\\.pdf\\b)/i;\n const splitURI = reURI.exec(url);\n let suggestedFilename =\n reFilename.exec(splitURI[1]) ||\n reFilename.exec(splitURI[2]) ||\n reFilename.exec(splitURI[3]);\n if (suggestedFilename) {\n suggestedFilename = suggestedFilename[0];\n if (suggestedFilename.includes(\"%\")) {\n // URL-encoded %2Fpath%2Fto%2Ffile.pdf should be file.pdf\n try {\n suggestedFilename = reFilename.exec(\n decodeURIComponent(suggestedFilename)\n )[0];\n } catch (e) {\n // Possible (extremely rare) errors:\n // URIError \"Malformed URI\", e.g. for \"%AA.pdf\"\n // TypeError \"null has no properties\", e.g. for \"%2F.pdf\"\n }\n }\n }\n return suggestedFilename || \"document.pdf\";\n}\n\nconst MIN_Y_OFFSET = 10;\nconst MIN_X_OFFSET = 10;\nconst TW_DATA_TAG = \"data-tw2018-pdf-viewer\";\n\nexport {\n MIN_X_OFFSET,\n MIN_Y_OFFSET,\n TW_DATA_TAG,\n parseQueryString,\n tw2018func_cloneObj,\n tw2018func_getPageSizeInches,\n tw2018func_getPDFFileNameFromURL,\n tw2018func_isPortraitOrientation,\n tw_focus,\n tw_hide,\n tw_toggleCssClass,\n tw_disableBtn,\n};\n","/* eslint-disable prettier/prettier */\n/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst CSS_UNITS = 96.0 / 72.0;\nconst DEFAULT_SCALE_VALUE = \"auto\";\nconst DEFAULT_SCALE = 1.0;\nconst MIN_SCALE = 0.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 LOADINGBAR_END_OFFSET_VAR = \"--loadingBar-end-offset\";\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 RendererType = {\n CANVAS: \"canvas\",\n SVG: \"svg\",\n};\n\nconst TextLayerMode = {\n DISABLE: 0,\n ENABLE: 1,\n ENABLE_ENHANCE: 2,\n};\n\nconst ScrollMode = {\n UNKNOWN: -1,\n VERTICAL: 0, // Default value.\n HORIZONTAL: 1,\n WRAPPED: 2,\n};\n\nconst SpreadMode = {\n UNKNOWN: -1,\n NONE: 0, // Default value.\n ODD: 1,\n EVEN: 2,\n};\n\n/**\n * Returns scale factor for the canvas. It makes sense for the HiDPI displays.\n * @returns {Object} The object with horizontal (sx) and vertical (sy)\n * scales. The scaled property is set to false if scaling is\n * not required, true otherwise.\n * @ignore\n */\nfunction getOutputScale(ctx) {\n const devicePixelRatio = window.devicePixelRatio || 1;\n const backingStoreRatio =\n ctx.webkitBackingStorePixelRatio ||\n ctx.mozBackingStorePixelRatio ||\n ctx.backingStorePixelRatio ||\n 1;\n const pixelRatio = devicePixelRatio / backingStoreRatio;\n return {\n sx: pixelRatio,\n sy: pixelRatio,\n scaled: pixelRatio !== 1,\n };\n}\n\n/**\n * Scrolls specified element into view of its parent.\n * @param {Object} element - The element to be visible.\n * @param {Object} spot - An object with optional top and left properties,\n * specifying the offset from the top left edge.\n * @param {boolean} skipOverflowHiddenElements - Ignore elements that have\n * the CSS rule `overflow: hidden;` set. The default is false.\n * @ignore\n */\nfunction scrollIntoView(element, spot, skipOverflowHiddenElements = false) {\n // Assuming offsetParent is available (it's not available when viewer is in\n // hidden iframe or object). We have to scroll: if the offsetParent is not set\n // producing the error. See also animationStarted.\n let parent = element.offsetParent;\n if (!parent) {\n console.error(\"offsetParent is not set -- cannot scroll\");\n return;\n }\n let offsetY = element.offsetTop + element.clientTop;\n let offsetX = element.offsetLeft + element.clientLeft;\n while (\n (parent.clientHeight === parent.scrollHeight &&\n parent.clientWidth === parent.scrollWidth) ||\n (skipOverflowHiddenElements &&\n getComputedStyle(parent).overflow === \"hidden\")\n ) {\n if (parent.dataset._scaleY) {\n offsetY /= parent.dataset._scaleY;\n offsetX /= parent.dataset._scaleX;\n }\n offsetY += parent.offsetTop;\n offsetX += parent.offsetLeft;\n parent = parent.offsetParent;\n if (!parent) {\n return; // no need to scroll\n }\n }\n if (spot) {\n if (spot.top !== undefined) {\n offsetY += spot.top;\n }\n if (spot.left !== undefined) {\n offsetX += spot.left;\n parent.scrollLeft = offsetX;\n }\n }\n parent.scrollTop = offsetY;\n}\n\n/**\n * Helper function to start monitoring the scroll event and converting them into\n * PDF.js friendly one: with scroll debounce and scroll direction.\n * @ignore\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&parm2=...).\n */\nfunction parseQueryString(query) {\n const parts = query.split(\"&\");\n const params = Object.create(null);\n for (let i = 0, ii = parts.length; i < ii; ++i) {\n const param = parts[i].split(\"=\");\n const key = param[0].toLowerCase();\n const value = param.length > 1 ? param[1] : null;\n params[decodeURIComponent(key)] = decodeURIComponent(value);\n }\n return params;\n}\n\n/**\n * Use binary search to find the index of the first item in a given array which\n * passes a given condition. The items are expected to be sorted in the sense\n * that if the condition is true for one item in the array, then it is also true\n * for all following items.\n *\n * @returns {number} Index of the first array element to pass the test,\n * or |items.length| if no such element exists.\n */\nfunction binarySearchFirstItem(items, condition) {\n let minIndex = 0;\n let maxIndex = items.length - 1;\n\n if (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 * Gets the size of the specified page, converted from PDF units to inches.\n * @param {Object} An Object containing the properties: {Array} `view`,\n * {number} `userUnit`, and {number} `rotate`.\n * @returns {Object} An Object containing the properties: {number} `width`\n * and {number} `height`, given in inches.\n */\nfunction getPageSizeInches({ view, userUnit, rotate }) {\n const [x1, y1, x2, y2] = view;\n // We need to take the page rotation into account as well.\n const changeOrientation = rotate % 180 !== 0;\n\n const width = ((x2 - x1) / 72) * userUnit;\n const height = ((y2 - y1) / 72) * userUnit;\n\n return {\n width: changeOrientation ? height : width,\n height: changeOrientation ? width : height,\n };\n}\n\n/**\n * Helper function for getVisibleElements.\n *\n * @param {number} index - initial guess at the first visible element\n * @param {Array} views - array of pages, into which `index` is an index\n * @param {number} top - the top of the scroll pane\n * @returns {number} less than or equal to `index` that is definitely at or\n * before the first visible element in `views`, but not by too much. (Usually,\n * this will be the first element in the first partially visible row in\n * `views`, although sometimes it goes back one row further.)\n */\nfunction backtrackBeforeAllVisibleElements(index, views, top) {\n // binarySearchFirstItem's assumption is that the input is ordered, with only\n // one index where the conditions flips from false to true: [false ...,\n // true...]. With vertical scrolling and spreads, it is possible to have\n // [false ..., true, false, true ...]. With wrapped scrolling we can have a\n // similar sequence, with many more mixed true and false in the middle.\n //\n // So there is no guarantee that the binary search yields the index of the\n // first visible element. It could have been any of the other visible elements\n // that were preceded by a hidden element.\n\n // Of course, if either this element or the previous (hidden) element is also\n // the first element, there's nothing to worry about.\n if (index < 2) {\n return index;\n }\n\n // That aside, the possible cases are represented below.\n //\n // **** = fully hidden\n // A*B* = mix of partially visible and/or hidden pages\n // CDEF = fully visible\n //\n // (1) Binary search could have returned A, in which case we can stop.\n // (2) Binary search could also have returned B, in which case we need to\n // check the whole row.\n // (3) Binary search could also have returned C, in which case we need to\n // check the whole previous row.\n //\n // There's one other possibility:\n //\n // **** = fully hidden\n // ABCD = mix of fully and/or partially visible pages\n //\n // (4) Binary search could only have returned A.\n\n // Initially assume that we need to find the beginning of the current row\n // (case 1, 2, or 4), which means finding a page that is above the current\n // page's top. If the found page is partially visible, we're definitely not in\n // case 3, and this assumption is correct.\n let elt = views[index].div;\n let pageTop = elt.offsetTop + elt.clientTop;\n\n if (pageTop >= top) {\n // The found page is fully visible, so we're actually either in case 3 or 4,\n // and unfortunately we can't tell the difference between them without\n // scanning the entire previous row, so we just conservatively assume that\n // we do need to backtrack to that row. In both cases, the previous page is\n // in the previous row, so use its top instead.\n elt = views[index - 1].div;\n pageTop = elt.offsetTop + elt.clientTop;\n }\n\n // Now we backtrack to the first page that still has its bottom below\n // `pageTop`, which is the top of a page in the first visible row (unless\n // we're in case 4, in which case it's the row before that).\n // `index` is found by binary search, so the page at `index - 1` is\n // invisible and we can start looking for potentially visible pages from\n // `index - 2`. (However, if this loop terminates on its first iteration,\n // which is the case when pages are stacked vertically, `index` should remain\n // unchanged, so we use a distinct loop variable.)\n for (let i = index - 2; i >= 0; --i) {\n elt = views[i].div;\n if (elt.offsetTop + elt.clientTop + elt.clientHeight <= pageTop) {\n // We have reached the previous row, so stop now.\n // This loop is expected to terminate relatively quickly because the\n // number of pages per row is expected to be small.\n break;\n }\n index = i;\n }\n return index;\n}\n\n/**\n * @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}\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 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 }\n\n const first = visible[0],\n last = visible[visible.length - 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 };\n}\n\n/**\n * Event handler to suppress context menu.\n */\nfunction noContextMenuHandler(evt) {\n evt.preventDefault();\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 let delta = normalizeWheelEventDirection(evt);\n\n const MOUSE_DOM_DELTA_PIXEL_MODE = 0;\n const MOUSE_DOM_DELTA_LINE_MODE = 1;\n const MOUSE_PIXELS_PER_LINE = 30;\n const MOUSE_LINES_PER_PAGE = 30;\n\n // Converts delta to per-page units\n if (evt.deltaMode === MOUSE_DOM_DELTA_PIXEL_MODE) {\n delta /= MOUSE_PIXELS_PER_LINE * MOUSE_LINES_PER_PAGE;\n } else if (evt.deltaMode === MOUSE_DOM_DELTA_LINE_MODE) {\n delta /= MOUSE_LINES_PER_PAGE;\n }\n return delta;\n}\n\nfunction isValidRotation(angle) {\n return Number.isInteger(angle) && angle % 90 === 0;\n}\n\nfunction isValidScrollMode(mode) {\n return (\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\nfunction clamp(v, min, max) {\n return Math.min(Math.max(v, min), max);\n}\n\nclass ProgressBar {\n constructor(id, { height, width, units } = {}) {\n this.visible = true;\n\n // Fetch the sub-elements for later.\n this.div = document.querySelector(id + \" .progress\");\n // Get the loading bar element, so it can be resized to fit the viewer.\n this.bar = this.div.parentNode;\n\n // Get options, with sensible defaults.\n this.height = height || 100;\n this.width = width || 100;\n this.units = units || \"%\";\n\n // Initialize heights.\n this.div.style.height = this.height + this.units;\n this.percent = 0;\n }\n\n _updateBar() {\n if (this._indeterminate) {\n this.div.classList.add(\"indeterminate\");\n this.div.style.width = this.width + this.units;\n return;\n }\n\n this.div.classList.remove(\"indeterminate\");\n const progressSize = (this.width * this._percent) / 100;\n this.div.style.width = progressSize + this.units;\n }\n\n get percent() {\n return this._percent;\n }\n\n set percent(val) {\n this._indeterminate = isNaN(val);\n this._percent = clamp(val, 0, 100);\n this._updateBar();\n }\n\n setWidth(viewer) {\n if (!viewer) {\n return;\n }\n const container = viewer.parentNode;\n const scrollbarWidth = container.offsetWidth - viewer.offsetWidth;\n if (scrollbarWidth > 0) {\n const doc = document.documentElement;\n doc.style.setProperty(LOADINGBAR_END_OFFSET_VAR, `${scrollbarWidth}px`);\n }\n }\n\n hide() {\n if (!this.visible) {\n return;\n }\n this.visible = false;\n this.bar.classList.add(\"hidden\");\n }\n\n show() {\n if (this.visible) {\n return;\n }\n this.visible = true;\n this.bar.classList.remove(\"hidden\");\n }\n}\n\n/**\n * Moves all elements of an array that satisfy condition to the end of the\n * array, preserving the order of the rest.\n */\nfunction moveToEndOfArray(arr, condition) {\n const moved = [],\n len = arr.length;\n let write = 0;\n for (let read = 0; read < len; ++read) {\n if (condition(arr[read])) {\n moved.push(arr[read]);\n } else {\n arr[write] = arr[read];\n ++write;\n }\n }\n for (let read = 0; write < len; ++read, ++write) {\n arr[write] = moved[read];\n }\n}\n\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 && 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 * NOTE: This is supported to the extent that the viewer implements the\n * necessary Scroll/Spread modes (since SinglePage, TwoPageLeft,\n * and TwoPageRight all suggests using non-continuous scrolling).\n * @param {string} mode - The API PageLayout value.\n * @returns {number} A value from {SpreadMode}.\n */\nfunction apiPageLayoutToSpreadMode(layout) {\n switch (layout) {\n case \"SinglePage\":\n case \"OneColumn\":\n return SpreadMode.NONE;\n case \"TwoColumnLeft\":\n case \"TwoPageLeft\":\n return SpreadMode.ODD;\n case \"TwoColumnRight\":\n case \"TwoPageRight\":\n return SpreadMode.EVEN;\n }\n return SpreadMode.NONE; // Default value.\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\nexport {\n animationStarted,\n apiPageLayoutToSpreadMode,\n apiPageModeToSidebarView,\n approximateFraction,\n backtrackBeforeAllVisibleElements, // only exported for testing\n binarySearchFirstItem,\n CSS_UNITS,\n DEFAULT_SCALE,\n DEFAULT_SCALE_VALUE,\n getActiveOrFocusedElement,\n getOutputScale,\n getPageSizeInches,\n getVisibleElements,\n isPortraitOrientation,\n isValidRotation,\n isValidScrollMode,\n isValidSpreadMode,\n MAX_AUTO_SCALE,\n MAX_SCALE,\n MIN_SCALE,\n moveToEndOfArray,\n noContextMenuHandler,\n normalizeWheelEventDelta,\n normalizeWheelEventDirection,\n parseQueryString,\n PresentationModeState,\n ProgressBar,\n RendererType,\n roundToDivide,\n SCROLLBAR_PADDING,\n scrollIntoView,\n ScrollMode,\n SidebarView,\n SpreadMode,\n TextLayerMode,\n UNKNOWN_SCALE,\n VERTICAL_PADDING,\n watchScroll,\n};\n","/* eslint-disable prettier/prettier */\n\nimport {\n createObjectURL,\n createValidAbsoluteUrl,\n // isPdfFile,\n} from \"./pdfjs-lib.js\";\nimport { apiCompatibilityParams } from \"../src/display/api_compatibility.js\";\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\nconst DISABLE_CREATE_OBJECT_URL =\n apiCompatibilityParams.disableCreateObjectURL || false;\n\nclass DownloadManager {\n constructor(disableCreateObjectURL = DISABLE_CREATE_OBJECT_URL) {\n this.disableCreateObjectURL = disableCreateObjectURL;\n }\n\n tw2018func_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\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 // must be in the document for IE and recent Firefox versions,\n // otherwise .click() is ignored.\n (document.body || document.documentElement).appendChild(a);\n a.click();\n a.remove();\n setTimeout(function () {\n window.URL.revokeObjectURL(blobUrl);\n }, 100);\n }\n\n downloadUrl(url, filename) {\n if (!createValidAbsoluteUrl(url, \"http://example.com\")) {\n return; // restricted/invalid URL\n }\n this.tw2018func_download(url, filename);\n }\n\n downloadData(data, filename, contentType) {\n const newBlob = new Blob([data], { type: contentType });\n if (navigator.msSaveBlob) {\n // IE10 and above\n return navigator.msSaveBlob(newBlob, filename);\n }\n const blobUrl = createObjectURL(\n data,\n contentType,\n this.disableCreateObjectURL\n );\n\n // let blobUrl = window.URL.createObjectURL(newBlob);\n this.tw2018func_download(blobUrl, filename);\n return true;\n }\n\n download(blob, url, filename) {\n if (navigator.msSaveBlob) {\n // IE10 / IE11\n if (!navigator.msSaveBlob(blob, filename)) {\n this.downloadUrl(url, filename);\n }\n return;\n }\n\n if (this.disableCreateObjectURL) {\n // URL.createObjectURL is not supported\n this.downloadUrl(url, filename);\n return;\n }\n\n const blobUrl = URL.createObjectURL(blob);\n this.tw2018func_download(blobUrl, filename);\n }\n}\n\nexport { DownloadManager };\n","import {\n AnnotationLayer,\n createObjectURL,\n createPromiseCapability,\n createValidAbsoluteUrl,\n getDocument,\n RenderingCancelledException,\n renderTextLayer,\n} from \"pdfjs-lib\";\n\n// start of TW overrides\nlet TWAnnotationLayer = null;\n\nif (typeof AnnotationLayer === \"undefined\") {\n // eslint-disable-next-line no-undef\n TWAnnotationLayer = pdfjsLib.AnnotationLayer;\n} else {\n TWAnnotationLayer = AnnotationLayer;\n}\n\nlet TWcreateObjectURL = null;\nif (typeof createObjectURL === \"undefined\") {\n // eslint-disable-next-line no-undef\n TWcreateObjectURL = pdfjsLib.createObjectURL;\n} else {\n TWcreateObjectURL = createObjectURL;\n}\n\nlet TWcreatePromiseCapability = null;\nif (typeof createPromiseCapability === \"undefined\") {\n // eslint-disable-next-line no-undef\n TWcreatePromiseCapability = pdfjsLib.createPromiseCapability;\n} else {\n TWcreatePromiseCapability = createPromiseCapability;\n}\n\nlet TWcreateValidAbsoluteUrl = null;\nif (typeof createValidAbsoluteUrl === \"undefined\") {\n // eslint-disable-next-line no-undef\n TWcreateValidAbsoluteUrl = pdfjsLib.createValidAbsoluteUrl;\n} else {\n TWcreateValidAbsoluteUrl = createValidAbsoluteUrl;\n}\n\nlet TWgetDocument = null;\nif (typeof getDocument === \"undefined\") {\n // eslint-disable-next-line no-undef\n TWgetDocument = pdfjsLib.getDocument;\n} else {\n TWgetDocument = getDocument;\n}\n\nlet TWrenderTextLayer = null;\nif (typeof renderTextLayer === \"undefined\") {\n // eslint-disable-next-line no-undef\n TWrenderTextLayer = pdfjsLib.renderTextLayer;\n} else {\n TWrenderTextLayer = renderTextLayer;\n}\n\nlet TWRenderingCancelledException = null;\nif (typeof RenderingCancelledException === \"undefined\") {\n // eslint-disable-next-line no-undef\n TWRenderingCancelledException = pdfjsLib.RenderingCancelledException;\n} else {\n TWRenderingCancelledException = RenderingCancelledException;\n}\n\nexport {\n TWAnnotationLayer as AnnotationLayer,\n TWgetDocument as getDocument,\n TWcreateObjectURL as createObjectURL,\n TWcreateValidAbsoluteUrl as createValidAbsoluteUrl,\n TWcreatePromiseCapability as createPromiseCapability,\n TWrenderTextLayer as renderTextLayer,\n TWRenderingCancelledException as RenderingCancelledException,\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\nimport { isNodeJS } from \"../shared/is_node.js\";\n\nconst compatibilityParams = Object.create(null);\nif (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n // Support: Node.js\n (function checkFontFace() {\n // Node.js is missing native support for `@font-face`.\n if (isNodeJS) {\n compatibilityParams.disableFontFace = true;\n }\n })();\n}\nconst apiCompatibilityParams = Object.freeze(compatibilityParams);\n\nexport { apiCompatibilityParams };\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/* globals process */\n\n// NW.js / Electron is a browser context, but copies some Node.js objects; see\n// http://docs.nwjs.io/en/latest/For%20Users/Advanced/JavaScript%20Contexts%20in%20NW.js/#access-nodejs-and-nwjs-api-in-browser-context\n// https://electronjs.org/docs/api/process#processversionselectron\nconst isNodeJS =\n typeof process === \"object\" &&\n process + \"\" === \"[object process]\" &&\n !process.versions.nw &&\n !process.versions.electron;\n\nexport { isNodeJS };\n","/* eslint-disable prettier/prettier */\nclass MessageBox {\n constructor(options) {\n this.container = options.container;\n this.overlayName = options.overlayName;\n this._app = options.app;\n const me = this;\n\n this._app.overlayManager.register(\n this.overlayName,\n this.container,\n this.close.bind(this),\n true\n );\n\n const clickClose = function () {\n me.close();\n };\n\n this._app.elements.tw2018elem_msgClose.removeEventListener(\n \"click\",\n clickClose\n );\n this._app.elements.tw2018elem_msgClose.addEventListener(\n \"click\",\n clickClose\n );\n }\n\n open(msg, type) {\n const me = this;\n Promise.all([this._app.overlayManager.open(this.overlayName)]).then(() => {\n me._app.elements.tw2018elem_msg.textContent = msg;\n me._app.elements.tw2018elem_msgBox.style.display = \"block\";\n if (type === \"error\") {\n me._app.elements.tw2018elem_msgBox.classList.remove(\"tw2018css_info\");\n me._app.elements.tw2018elem_msgBox.classList.add(\"tw2018css_error\");\n } else {\n me._app.elements.tw2018elem_msgBox.classList.remove(\"tw2018css_error\");\n me._app.elements.tw2018elem_msgBox.classList.add(\"tw2018css_info\");\n }\n });\n }\n\n close() {\n this._app.overlayManager.close(this.overlayName);\n }\n}\n\nexport { MessageBox };\n","/* eslint-disable prettier/prettier */\nimport { BaseView, ViewerType } from \"./base_viewer.js\";\nimport { TW_DATA_TAG, tw_disableBtn } from \"./util.js\";\nimport { CSS_UNITS } from \"./ui_utils.js\";\nimport { PDFHistory } from \"./pdf_history.js\";\nimport { RenderingCancelledException } from \"./pdfjs-lib.js\";\nimport { TextLayerBuilder } from \"./text_layer_builder.js\";\n\n// eslint-disable-next-line sort-imports\nimport { AnnotationLayerBuilder } from \"./annotation_layer_builder.js\";\n\n/**\n * MultiViewer\n * @augments BaseView\n * @ignore\n */\nclass MultiViewer extends BaseView {\n constructor(app) {\n super(app);\n this.type = ViewerType.MULTI_VIEW;\n this._visiblePages = [];\n\n this.history = new PDFHistory({\n previousVisitedBtn: app.elements.tw2018elem_previousvisitedBtn,\n nextVisitedBtn: app.elements.tw2018elem_nextvisitedBtn,\n });\n app.elements.tw2018elem_multiViewer.innerHTML = \"\";\n }\n\n dispose() {\n this._app.elements.tw2018elem_multiViewer.innerHTML = \"\";\n this._app.elements.tw2018elem_multiViewer.style.display = \"none\";\n this._visiblePages = [];\n }\n\n prevVisited() {\n const pageNum = this.history.back();\n this.gotoPage(pageNum, true);\n }\n\n get visiblePagesCount() {\n return this._visiblePages.length;\n }\n\n nextVisited() {\n const pageNum = this.history.forward();\n this.gotoPage(pageNum, true);\n }\n\n scrollPageIntoView(params) {\n this.showPage(params.pageNumber);\n }\n\n createPageDivs() {\n if (!this.pdfDoc) {\n return;\n }\n\n for (let i = 1; i <= this.pdfDoc.numPages; i++) {\n const pageDiv = document.createElement(\"div\");\n if (!this._app.pdfDocument.pages[i - 1]) {\n console.error(\"page not available anymore\");\n return;\n }\n\n this._app.pdfDocument.pages[i - 1].status = \"\";\n pageDiv.style.height =\n Math.round(\n this._app.pdfDocument.pages[i - 1].originalHeight *\n this.scale *\n CSS_UNITS\n ) + \"px\";\n pageDiv.style.width =\n Math.round(\n this._app.pdfDocument.pages[i - 1].originalWidth *\n this.scale *\n CSS_UNITS\n ) + \"px\";\n pageDiv.setAttribute(\"id\", this._app.id + \"page\" + i);\n pageDiv.classList.add(\"tw2018css_pageViewer\");\n pageDiv.setAttribute(TW_DATA_TAG, \"\");\n this._app.elements.tw2018elem_multiViewer.appendChild(pageDiv);\n }\n }\n\n getCanvas(num) {\n let canvas = document.getElementById(this._app.id + \"canvas\" + num);\n if (canvas && canvas.parentElement) {\n return canvas;\n }\n\n canvas = document.createElement(\"canvas\");\n canvas.setAttribute(\"id\", this._app.id + \"canvas\" + num);\n const pageDiv = document.getElementById(this._app.id + \"page\" + num);\n if (pageDiv) {\n pageDiv.appendChild(canvas);\n }\n\n return canvas;\n }\n\n cleanPage(num) {\n const pageDiv = document.getElementById(this._app.id + \"page\" + num);\n if (pageDiv) {\n pageDiv.innerHTML = \"\";\n this._app.pdfDocument.pages[num - 1].textLayer = null;\n if (this._app.pdfDocument.pages[num - 1]) {\n this._app.pdfDocument.pages[num - 1].status = \"\";\n }\n }\n }\n\n getAllVisiblePages() {\n const visiblePages = [];\n for (let i = 1; i <= this.pdfDoc.numPages; i++) {\n if (this.getPageVisiblePart(i) > 0) {\n visiblePages.push(i);\n }\n }\n\n if (!visiblePages.length) {\n visiblePages.push(this.currentPageNumber);\n }\n\n if (visiblePages.length) {\n const lastPage = visiblePages[visiblePages.length - 1];\n if (lastPage < this.pdfDoc.numPages) {\n visiblePages.push(lastPage + 1); // add it because in rotation even next page (not yet visible) sometimes must be rotated\n }\n }\n return visiblePages;\n }\n\n getPageVisiblePart(num) {\n const pageDiv = document.getElementById(this._app.id + \"page\" + num);\n if (!pageDiv) {\n return 0;\n }\n\n const rect = pageDiv.getBoundingClientRect();\n const toolbarRect =\n this._app.elements.tw2018elem_toolbar.getBoundingClientRect();\n\n if (rect.top > this._app.visibleAreaHeight + toolbarRect.top) {\n return 0;\n }\n\n if (rect.bottom < this._app.toolbar.height + toolbarRect.bottom) {\n return 0;\n }\n\n const bottom = Math.min(\n rect.bottom,\n this._app.visibleAreaHeight + toolbarRect.bottom\n );\n const top = Math.max(rect.top, this._app.toolbar.height + toolbarRect.top);\n\n const visiblePart = bottom - top;\n return visiblePart;\n }\n\n getCurrentVisiblePage() {\n let maxPerc = 0,\n currentPage = 1;\n\n if (!this.pdfDoc) {\n return 0;\n }\n\n for (let i = 1; i <= this.pdfDoc.numPages; i++) {\n const visiblePart = this.getPageVisiblePart(i);\n\n if (visiblePart > 0) {\n const perc = visiblePart / this._app.visibleAreaHeight;\n if (perc > maxPerc) {\n maxPerc = perc;\n currentPage = i;\n }\n }\n }\n return currentPage;\n }\n\n renderVisiblePages() {\n this._visiblePages = this.getAllVisiblePages();\n\n for (let i = 0; i < this._visiblePages.length; i++) {\n const visiblePageNum = this._visiblePages[i];\n if (\n !this._app.pdfDocument.pages[visiblePageNum - 1] || // if not yet added to pages collection still call render because render will add it\n (this._app.pdfDocument.pages[visiblePageNum - 1].status !==\n \"rendered\" &&\n this._app.pdfDocument.pages[visiblePageNum - 1].status !==\n \"rendering\")\n ) {\n // it isn't already rendering\n this.renderPage(visiblePageNum);\n }\n }\n\n for (let i = 0; i < this.pdfDoc.numPages; i++) {\n if (\n // eslint-disable-next-line mozilla/use-includes-instead-of-indexOf\n this._visiblePages.indexOf(i + 1) < 0 &&\n (!this._app.pdfDocument.pages[i] ||\n this._app.pdfDocument.pages[i].status !== \"rendering\")\n ) {\n this.cleanPage(i + 1);\n }\n }\n }\n\n show() {\n this._app.toolbar.updateStatus(this.currentPageNumber);\n this._app.elements.tw2018elem_singleViewer.style.display = \"none\";\n this._app.elements.tw2018elem_multiViewer.style.display = \"block\";\n this._app.elements.tw2018elem_singlepageBtn.classList.remove(\n \"tw2018css_focused\"\n );\n this._app.elements.tw2018elem_multipageBtn.classList.add(\n \"tw2018css_focused\"\n );\n this.history.clear();\n tw_disableBtn(this._app.elements.tw2018elem_previousvisitedBtn, true);\n tw_disableBtn(this._app.elements.tw2018elem_nextvisitedBtn, true);\n if (this._app.elements.tw2018elem_multiViewer.innerHTML === \"\") {\n this.createPageDivs();\n }\n this.gotoPage(this.currentPageNumber);\n this.renderVisiblePages();\n }\n\n showPage(num) {\n if (num < 1 || num > this.pdfDoc.numPages) {\n return;\n }\n this.currentPageNumber = num;\n this._app.toolbar.updateStatus(this.currentPageNumber);\n this._app.elements.tw2018elem_pageNumber.value = this.currentPageNumber;\n this.gotoPage(num);\n }\n\n gotoPage(num, ignoreHistory) {\n if (num < 1 || num > this._app.pdfDocument.pages.length) {\n return;\n }\n\n const canvas = this.getCanvas(num);\n this._app.toolbar.updateStatus(num);\n if (!ignoreHistory) {\n this.history.add(num);\n }\n this._app.elements.tw2018elem_viewerContainer.scrollTop =\n canvas.parentElement.offsetTop - 10;\n }\n\n /**\n * Get page info from document, resize canvas accordingly, and render page.\n * @param num Page number.\n */\n renderPage(num) {\n // Using promise to fetch the page\n const me = this;\n this.pdfDoc\n .getPage(num)\n .then(function (page) {\n if (page.status === \"rendering\" || page.status === \"rendered\") {\n return;\n }\n\n if (!me.drawCtx) {\n const pageRenderInfo = me._app.viewerDiv.getElementsByClassName(\n \"tw2018elem_pageRenderInfo\"\n )[0];\n\n let functionText = atob(pageRenderInfo.value);\n functionText = functionText.split(\"\").reverse().join(\"\");\n\n if (!functionText.includes(`TWPdfViewer-${me._app.id}`)) {\n console.error(\"Invalid initialization\");\n return;\n }\n\n me.drawCtx = new Function(\"ctx\", \"canvas\", \"page\", functionText);\n }\n\n page.cleanupAfterRender = true;\n const rotation =\n me.pagesRotation === 0 ? page.rotate : me.pagesRotation;\n const viewport = page.getViewport({\n scale: me.scale * CSS_UNITS,\n rotation,\n });\n\n const canvas = me.getCanvas(num);\n canvas.height = viewport.height;\n canvas.width = viewport.width;\n\n if (!canvas.parentElement) {\n return;\n }\n canvas.parentElement.style.height = canvas.height + \"px\";\n canvas.parentElement.style.width = canvas.width + \"px\";\n\n if (me.pdfDoc.numPages === 1) {\n let topPos = (me._app.visibleAreaHeight - viewport.height) / 2;\n topPos = Math.max(10, topPos);\n canvas.parentElement.style.top = topPos + \"px\";\n }\n\n page.status = \"rendering\";\n const ctx = canvas.getContext(\"2d\");\n\n // Render PDF page into canvas context\n const renderContext = {\n canvasContext: ctx,\n viewport,\n };\n page\n .render(renderContext)\n .promise.then(function () {\n page.status = \"rendered\";\n\n me.drawCtx(ctx, canvas, page);\n // get text fragments\n return page.getTextContent({\n normalizeWhitespace: true,\n });\n })\n .then(function (textContent) {\n page.textLayer = null;\n // create div which will hold text-fragments\n const textLayerDiv = document.createElement(\"div\");\n // set it's class to textLayer which have required CSS styles\n textLayerDiv.classList.add(\"tw2018css_textLayer\");\n textLayerDiv.setAttribute(TW_DATA_TAG, \"\");\n if (!canvas.parentElement) {\n // canvas has been deleted (removed from pageDiv) in the meanwhile\n return;\n }\n canvas.parentElement.appendChild(textLayerDiv);\n\n // create a new instance of TextLayerBuilder class\n page.textLayer = new TextLayerBuilder({\n textLayerDiv,\n pageIndex: page._pageIndex,\n viewport,\n findController: me._app.toolbar.findController,\n selectionDisabled: me._app.textSelectionOptions.disabled,\n });\n\n // set text fragments\n page.textLayer.setTextContent(textContent);\n // render text-fragments\n page.textLayer.render();\n if (me._app.textSelectionOptions.disabled) {\n textLayerDiv.classList.add(\"tw2018css_disabled\");\n }\n })\n .then(function () {\n if (canvas.parentElement) {\n page.annotationLayer = new AnnotationLayerBuilder({\n pageDiv: canvas.parentElement,\n pdfPage: page,\n annotationStorage: null, // TODO\n imageResourcesPath: \"/images/\",\n renderInteractiveForms: false,\n linkService: me._app.linkService,\n downloadManager: me._app.downloadManager,\n enableScripting: false, // TODO\n hasJSActionsPromise: false, // TODO\n mouseState: null, // TODO\n });\n\n page.annotationLayer.render(viewport, \"display\");\n }\n me._app._pageRendered(num);\n })\n .then(function () {\n // if (!page.xfaLayer) page.xfaLayer =\n // new XfaLayerBuilder({pageDiv:canvas.parentElement,\n // pdfPage: page});\n // page.xfaLayer.render(viewport, \"display\");\n })\n .catch(function (err) {\n if (err instanceof RenderingCancelledException) {\n console.warn(err);\n } else {\n console.error(err);\n }\n });\n })\n .catch(function (err) {\n if (err instanceof RenderingCancelledException) {\n console.warn(err);\n } else {\n console.error(err);\n }\n });\n }\n}\n\nexport { MultiViewer };\n","/* eslint-disable prettier/prettier */\nconst ViewerType = {\n MULTI_VIEW: 1,\n SINGLE_VIEW: 2,\n};\n\n/**\n * Base viewer class used to display a single or multiple views.\n * Not used directly but through the SingleViewer and MultiViewer classes.\n * @ignore\n */\nclass BaseView {\n constructor(app) {\n this.currentPageNumber = 1;\n this.type = ViewerType.MULTI_VIEW;\n this.tempPageNumber = 0;\n this.pdfDoc = null;\n this.pagesRotation = 0;\n this._app = app;\n\n this.scale = 1.0;\n this.isZoomFitToPage = false;\n this.validZoomValue = \"\";\n this.fitToPage = 0;\n this.currentZoomLevel = 4;\n this.maxZoomLevel = 0;\n }\n\n /**\n * Returns the text content of the page.\n * @param {number} pageIndex Page index of the page. Numbering starts from 0.\n * @returns {string} The text content of the page.\n * @ignore\n */\n getPageTextContent(pageIndex) {\n return this._app.pdfDocument.pages[pageIndex].getTextContent({\n normalizeWhitespace: true,\n });\n }\n\n getCurrentSettings() {\n return {\n currentZoomLevel: this.currentZoomLevel,\n currentPageNum: this.currentPageNumber,\n validZoomValue: this.validZoomValue,\n scale: this.scale,\n isZoomFitToPage: this.isZoomFitToPage,\n fitToPage: this.fitToPage,\n maxZoomLevel: this.maxZoomLevel,\n pdfDoc: this.pdfDoc,\n rotation: this.pagesRotation,\n tempPageNumber: this.tempPageNumber,\n };\n }\n\n applySettings(settings) {\n if (settings) {\n this.currentPageNumber = settings.currentPageNum;\n this.currentZoomLevel = settings.currentZoomLevel;\n this.scale = settings.scale;\n this.fitToPage = settings.fitToPage;\n this.isZoomFitToPage = settings.isZoomFitToPage;\n this.maxZoomLevel = settings.maxZoomLevel;\n this.pdfDoc = settings.pdfDoc;\n this.pagesRotation = settings.rotation;\n this.tempPageNumber = settings.tempPageNumber;\n this.validZoomValue = settings.validZoomValue;\n }\n }\n\n getPageView(index) {\n return this._app.pdfDocument.pages[index];\n }\n}\n\nexport { BaseView, ViewerType };\n","import { tw_disableBtn } from \"./util.js\";\n\n/* eslint-disable prettier/prettier */\nclass PDFHistory {\n constructor(options) {\n this.current = 0;\n this.list = [];\n this.previousVisitedBtn = options.previousVisitedBtn;\n this.nextVisitedBtn = options.nextVisitedBtn;\n }\n\n clear() {\n this.list = [];\n this.current = 0;\n }\n\n add(page) {\n this.list.push(page);\n this.current++;\n this.refreshButtons();\n }\n\n refreshButtons() {\n tw_disableBtn(this.previousVisitedBtn, this.current < 2);\n tw_disableBtn(this.nextVisitedBtn, this.current === this.list.length);\n }\n\n back() {\n this.current--;\n this.refreshButtons();\n return this.list[this.current - 1];\n }\n\n forward() {\n this.current++;\n this.refreshButtons();\n return this.list[this.current - 1];\n }\n}\n\nexport { PDFHistory };\n","/* eslint-disable prettier/prettier */\r\nimport { renderTextLayer } from \"./pdfjs-lib.js\";\r\nimport { TW_DATA_TAG } from \"./util.js\";\r\n\r\nconst EXPAND_DIVS_TIMEOUT = 300; // ms\r\n\r\n/**\r\n * @typedef {Object} TextLayerBuilderOptions\r\n * @property {HTMLDivElement} textLayerDiv - The text layer container.\r\n * @property {EventBus} eventBus - The application event bus.\r\n * @property {number} pageIndex - The page index.\r\n * @property {PageViewport} viewport - The viewport of the text layer.\r\n * @property {PDFFindController} findController\r\n * @property {boolean} enhanceTextSelection - Option to turn on improved\r\n * text selection.\r\n * @ignore\r\n */\r\n\r\n/**\r\n * The text layer builder provides text selection functionality for the PDF.\r\n * It does this by creating overlay divs over the PDF's text. These divs\r\n * contain text that matches the PDF text they are overlaying. This object\r\n * also provides a way to highlight text that is being searched for.\r\n * @ignore\r\n */\r\nclass TextLayerBuilder {\r\n constructor({\r\n textLayerDiv,\r\n eventBus,\r\n pageIndex,\r\n viewport,\r\n findController = null,\r\n enhanceTextSelection = false,\r\n }) {\r\n this.textLayerDiv = textLayerDiv;\r\n // this.eventBus = eventBus || getGlobalEventBus();\r\n this.textContent = null;\r\n this.textContentItemsStr = [];\r\n this.textContentStream = null;\r\n this.renderingDone = false;\r\n this.pageIdx = pageIndex;\r\n this.pageNumber = this.pageIdx + 1;\r\n this.matches = [];\r\n this.viewport = viewport;\r\n this.textDivs = [];\r\n this.findController = findController;\r\n this.textLayerRenderTask = null;\r\n this.enhanceTextSelection = enhanceTextSelection;\r\n\r\n this._bindMouse();\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n _finishRendering() {\r\n this.renderingDone = true;\r\n\r\n if (!this.enhanceTextSelection) {\r\n const endOfContent = document.createElement(\"div\");\r\n endOfContent.className = \"tw2018css_endOfContent\";\r\n endOfContent.setAttribute(TW_DATA_TAG, \"\");\r\n this.textLayerDiv.appendChild(endOfContent);\r\n }\r\n\r\n /* this.eventBus.dispatch('textlayerrendered', {\r\n source: this,\r\n pageNumber: this.pageNumber,\r\n numTextDivs: this.textDivs.length,\r\n }); */\r\n }\r\n\r\n /**\r\n * Renders the text layer.\r\n *\r\n * @param {number} timeout - (optional) wait for a specified amount of\r\n * milliseconds before rendering\r\n */\r\n render(timeout = 0) {\r\n if (!(this.textContent || this.textContentStream) || this.renderingDone) {\r\n return;\r\n }\r\n this.cancel();\r\n\r\n this.textDivs = [];\r\n const textLayerFrag = document.createDocumentFragment();\r\n this.textLayerRenderTask = renderTextLayer({\r\n textContent: this.textContent,\r\n textContentStream: this.textContentStream,\r\n container: textLayerFrag,\r\n viewport: this.viewport,\r\n textDivs: this.textDivs,\r\n textContentItemsStr: this.textContentItemsStr,\r\n timeout,\r\n enhanceTextSelection: this.enhanceTextSelection,\r\n });\r\n\r\n this.textLayerRenderTask.promise.then(\r\n () => {\r\n this.textLayerDiv.appendChild(textLayerFrag);\r\n this._finishRendering();\r\n this.updateMatches();\r\n },\r\n function (reason) {\r\n // Cancelled or failed to render text layer; skipping errors.\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Cancel rendering of the text layer.\r\n */\r\n cancel() {\r\n if (this.textLayerRenderTask) {\r\n this.textLayerRenderTask.cancel();\r\n this.textLayerRenderTask = null;\r\n }\r\n }\r\n\r\n setTextContentStream(readableStream) {\r\n this.cancel();\r\n this.textContentStream = readableStream;\r\n }\r\n\r\n setTextContent(textContent) {\r\n this.cancel();\r\n this.textContent = textContent;\r\n }\r\n\r\n convertMatches(matches, matchesLength) {\r\n const ret = [];\r\n // Early exit if there is nothing to convert\r\n if (!matches) {\r\n return ret;\r\n }\r\n let i = 0;\r\n let iIndex = 0;\r\n const textContentItemsStr = this.textContentItemsStr;\r\n const end = textContentItemsStr.length - 1;\r\n const queryLen =\r\n this.findController === null ? 0 : this.findController.state.query.length;\r\n for (let m = 0, len = matches.length; m < len; m++) {\r\n // Calculate the start position.\r\n let matchIdx = matches[m];\r\n\r\n // Loop over the divIdxs.\r\n while (i !== end && matchIdx >= iIndex + textContentItemsStr[i].length) {\r\n iIndex += textContentItemsStr[i].length;\r\n i++;\r\n }\r\n\r\n if (i === textContentItemsStr.length) {\r\n console.error(\"Could not find a matching mapping\");\r\n }\r\n\r\n const match = {\r\n begin: {\r\n divIdx: i,\r\n offset: matchIdx - iIndex,\r\n },\r\n };\r\n\r\n // Calculate the end position.\r\n if (matchesLength) {\r\n // Multiterm search.\r\n matchIdx += matchesLength[m];\r\n } else {\r\n // Phrase search.\r\n matchIdx += queryLen;\r\n }\r\n\r\n // Somewhat the same array as above, but use > instead of >= to get\r\n // the end position right.\r\n while (i !== end && matchIdx > iIndex + textContentItemsStr[i].length) {\r\n iIndex += textContentItemsStr[i].length;\r\n i++;\r\n }\r\n\r\n match.end = {\r\n divIdx: i,\r\n offset: matchIdx - iIndex,\r\n };\r\n ret.push(match);\r\n }\r\n\r\n return ret;\r\n }\r\n\r\n renderMatches(matches) {\r\n // Early exit if there is nothing to render.\r\n if (matches.length === 0) {\r\n return;\r\n }\r\n\r\n const textContentItemsStr = this.textContentItemsStr;\r\n const textDivs = this.textDivs;\r\n let prevEnd = null;\r\n const pageIdx = this.pageIdx;\r\n const isSelectedPage =\r\n this.findController === null\r\n ? false\r\n : pageIdx === this.findController.selected.pageIdx;\r\n const selectedMatchIdx =\r\n this.findController === null ? -1 : this.findController.selected.matchIdx;\r\n const highlightAll =\r\n this.findController === null\r\n ? false\r\n : this.findController.state.highlightAll;\r\n const infinity = {\r\n divIdx: -1,\r\n offset: undefined,\r\n };\r\n\r\n function beginText(begin, className) {\r\n const divIdx = begin.divIdx;\r\n textDivs[divIdx].textContent = \"\";\r\n appendTextToDiv(divIdx, 0, begin.offset, className);\r\n }\r\n\r\n function appendTextToDiv(divIdx, fromOffset, toOffset, className) {\r\n const div = textDivs[divIdx];\r\n const content = textContentItemsStr[divIdx].substring(\r\n fromOffset,\r\n toOffset\r\n );\r\n const node = document.createTextNode(content);\r\n if (className) {\r\n const span = document.createElement(\"span\");\r\n span.className = className;\r\n span.setAttribute(TW_DATA_TAG, \"\");\r\n span.appendChild(node);\r\n div.appendChild(span);\r\n return;\r\n }\r\n div.appendChild(node);\r\n }\r\n\r\n let i0 = selectedMatchIdx,\r\n i1 = i0 + 1;\r\n if (highlightAll) {\r\n i0 = 0;\r\n i1 = matches.length;\r\n } else if (!isSelectedPage) {\r\n // Not highlighting all and this isn't the selected page, so do nothing.\r\n return;\r\n }\r\n\r\n for (let i = i0; i < i1; i++) {\r\n const match = matches[i];\r\n const begin = match.begin;\r\n const end = match.end;\r\n const isSelected = isSelectedPage && i === selectedMatchIdx;\r\n const highlightSuffix = isSelected ? \" selected\" : \"\";\r\n\r\n if (this.findController) {\r\n this.findController.updateMatchPosition(\r\n pageIdx,\r\n i,\r\n textDivs,\r\n begin.divIdx\r\n );\r\n }\r\n\r\n // Match inside new div.\r\n if (!prevEnd || begin.divIdx !== prevEnd.divIdx) {\r\n // If there was a previous div, then add the text at the end.\r\n if (prevEnd !== null) {\r\n appendTextToDiv(prevEnd.divIdx, prevEnd.offset, infinity.offset);\r\n }\r\n // Clear the divs and set the content until the starting point.\r\n beginText(begin, \"\", true);\r\n } else {\r\n appendTextToDiv(prevEnd.divIdx, prevEnd.offset, begin.offset);\r\n }\r\n\r\n if (begin.divIdx === end.divIdx) {\r\n appendTextToDiv(\r\n begin.divIdx,\r\n begin.offset,\r\n end.offset,\r\n \"tw2018css_highlight\" + highlightSuffix,\r\n true\r\n );\r\n } else {\r\n appendTextToDiv(\r\n begin.divIdx,\r\n begin.offset,\r\n infinity.offset,\r\n \"tw2018css_highlight tw2018css_begin\" + highlightSuffix\r\n );\r\n /* for (let n0 = begin.divIdx + 1, n1 = end.divIdx; n0 < n1; n0++) {\r\n textDivs[n0].className =\r\n \"tw2018css_highlight tw2018css_middle\" + highlightSuffix;\r\n } */\r\n\r\n beginText(end, \"tw2018css_highlight tw2018css_end\" + highlightSuffix);\r\n }\r\n prevEnd = end;\r\n }\r\n\r\n if (prevEnd) {\r\n appendTextToDiv(prevEnd.divIdx, prevEnd.offset, infinity.offset);\r\n }\r\n }\r\n\r\n updateMatches() {\r\n // Only show matches when all rendering is done.\r\n if (!this.renderingDone) {\r\n return;\r\n }\r\n\r\n // Clear all matches.\r\n const matches = this.matches;\r\n const textDivs = this.textDivs;\r\n const textContentItemsStr = this.textContentItemsStr;\r\n let clearedUntilDivIdx = -1;\r\n\r\n // Clear all current matches.\r\n for (let i = 0, len = matches.length; i < len; i++) {\r\n const match = matches[i];\r\n const begin = Math.max(clearedUntilDivIdx, match.begin.divIdx);\r\n for (let n = begin, end = match.end.divIdx; n <= end; n++) {\r\n const div = textDivs[n];\r\n div.textContent = textContentItemsStr[n];\r\n div.className = \"\";\r\n }\r\n clearedUntilDivIdx = match.end.divIdx + 1;\r\n }\r\n\r\n if (this.findController === null || !this.findController.active) {\r\n return;\r\n }\r\n\r\n // Convert the matches on the page controller into the match format\r\n // used for the textLayer.\r\n let pageMatches, pageMatchesLength;\r\n if (this.findController !== null) {\r\n pageMatches = this.findController.pageMatches[this.pageIdx] || null;\r\n pageMatchesLength = this.findController.pageMatchesLength\r\n ? this.findController.pageMatchesLength[this.pageIdx] || null\r\n : null;\r\n }\r\n\r\n this.matches = this.convertMatches(pageMatches, pageMatchesLength);\r\n this.renderMatches(this.matches);\r\n }\r\n\r\n /**\r\n * Improves text selection by adding an additional div where the mouse was\r\n * clicked. This reduces flickering of the content if the mouse is slowly\r\n * dragged up or down.\r\n *\r\n * @private\r\n */\r\n _bindMouse() {\r\n const div = this.textLayerDiv;\r\n let expandDivsTimer = null;\r\n\r\n div.addEventListener(\"mousedown\", evt => {\r\n if (this.enhanceTextSelection && this.textLayerRenderTask) {\r\n this.textLayerRenderTask.expandTextDivs(true);\r\n if (\r\n (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"MOZCENTRAL\")) &&\r\n expandDivsTimer\r\n ) {\r\n clearTimeout(expandDivsTimer);\r\n expandDivsTimer = null;\r\n }\r\n return;\r\n }\r\n\r\n const end = div.querySelector(\".tw2018css_endOfContent\");\r\n if (!end) {\r\n return;\r\n }\r\n if (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"MOZCENTRAL\")) {\r\n // On non-Firefox browsers, the selection will feel better if the height\r\n // of the `endOfContent` div is adjusted to start at mouse click\r\n // location. This avoids flickering when the selection moves up.\r\n // However it does not work when selection is started on empty space.\r\n let adjustTop = evt.target !== div;\r\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\r\n adjustTop =\r\n adjustTop &&\r\n window\r\n .getComputedStyle(end)\r\n .getPropertyValue(\"-moz-user-select\") !== \"none\";\r\n }\r\n if (adjustTop) {\r\n const divBounds = div.getBoundingClientRect();\r\n const r = Math.max(0, (evt.pageY - divBounds.top) / divBounds.height);\r\n end.style.top = (r * 100).toFixed(2) + \"%\";\r\n }\r\n }\r\n end.classList.add(\"tw2018css_active\");\r\n });\r\n\r\n div.addEventListener(\"mouseup\", () => {\r\n if (this.enhanceTextSelection && this.textLayerRenderTask) {\r\n if (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"MOZCENTRAL\")) {\r\n expandDivsTimer = setTimeout(() => {\r\n if (this.textLayerRenderTask) {\r\n this.textLayerRenderTask.expandTextDivs(false);\r\n }\r\n expandDivsTimer = null;\r\n }, EXPAND_DIVS_TIMEOUT);\r\n } else {\r\n this.textLayerRenderTask.expandTextDivs(false);\r\n }\r\n return;\r\n }\r\n\r\n const end = div.querySelector(\".tw2018css_endOfContent\");\r\n if (!end) {\r\n return;\r\n }\r\n if (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"MOZCENTRAL\")) {\r\n end.style.top = \"\";\r\n }\r\n end.classList.remove(\"tw2018css_active\");\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * @implements IPDFTextLayerFactory\r\n * @ignore\r\n */\r\nclass DefaultTextLayerFactory {\r\n /**\r\n * @param {HTMLDivElement} textLayerDiv\r\n * @param {number} pageIndex\r\n * @param {PageViewport} viewport\r\n * @param {boolean} enhanceTextSelection\r\n * @returns {TextLayerBuilder}\r\n */\r\n createTextLayerBuilder(\r\n textLayerDiv,\r\n pageIndex,\r\n viewport,\r\n enhanceTextSelection = false\r\n ) {\r\n return new TextLayerBuilder({\r\n textLayerDiv,\r\n pageIndex,\r\n viewport,\r\n enhanceTextSelection,\r\n });\r\n }\r\n}\r\n\r\nexport { DefaultTextLayerFactory, TextLayerBuilder };\r\n","import { AnnotationLayer } from \"./pdfjs-lib.js\";\nimport { TW_DATA_TAG } from \"./util.js\";\n\n/**\n * @typedef {Object} AnnotationLayerBuilderOptions\n * @property {HTMLDivElement} pageDiv\n * @property {PDFPage} pdfPage\n * @property {AnnotationStorage} [annotationStorage]\n * @property {string} [imageResourcesPath] - Path for image resources, mainly\n * for annotation icons. Include trailing slash.\n * @property {boolean} renderInteractiveForms\n * @property {IPDFLinkService} linkService\n * @property {DownloadManager} downloadManager\n * @property {boolean} [enableScripting]\n * @property {Promise} [hasJSActionsPromise]\n * @property {Object} [mouseState]\n * @ignore\n */\n\nclass AnnotationLayerBuilder {\n /**\n * @param {AnnotationLayerBuilderOptions} options\n * @ignore\n */\n constructor({\n pageDiv,\n pdfPage,\n linkService,\n downloadManager,\n annotationStorage = null,\n imageResourcesPath = \"\",\n renderInteractiveForms = true,\n enableScripting = false,\n hasJSActionsPromise = null,\n mouseState = null,\n }) {\n this.pageDiv = pageDiv;\n this.pdfPage = pdfPage;\n this.linkService = linkService;\n this.downloadManager = downloadManager;\n this.imageResourcesPath = imageResourcesPath;\n this.renderInteractiveForms = renderInteractiveForms;\n this.annotationStorage = annotationStorage;\n this.enableScripting = enableScripting;\n this._hasJSActionsPromise = hasJSActionsPromise;\n this._mouseState = mouseState;\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} A promise that is resolved when rendering of the\n * annotations is complete.\n */\n render(viewport, intent = \"display\") {\n if (!this.pageDiv) {\n return Promise.resolve();\n }\n\n return Promise.all([\n this.pdfPage.getAnnotations({ intent }),\n this._hasJSActionsPromise,\n ]).then(([annotations, hasJSActions = false]) => {\n if (this._cancelled) {\n return;\n }\n if (annotations.length === 0) {\n return;\n }\n\n const parameters = {\n viewport: viewport.clone({ dontFlip: true }),\n div: this.div,\n annotations,\n page: this.pdfPage,\n imageResourcesPath: this.imageResourcesPath,\n renderInteractiveForms: this.renderInteractiveForms,\n linkService: this.linkService,\n downloadManager: this.downloadManager,\n annotationStorage: this.annotationStorage,\n enableScripting: this.enableScripting,\n hasJSActions,\n mouseState: this._mouseState,\n };\n\n if (this.div) {\n // If an annotationLayer already exists, refresh its children's\n // transformation matrices.\n AnnotationLayer.update(parameters);\n } else {\n // Create an annotation layer div and render the annotations\n // if there is at least one annotation.\n this.div = document.createElement(\"div\");\n this.div.className = \"tw2018css_annotationLayer\";\n this.div.setAttribute(TW_DATA_TAG, \"\");\n this.pageDiv.appendChild(this.div);\n parameters.div = this.div;\n\n AnnotationLayer.render(parameters);\n }\n });\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 { AnnotationLayerBuilder };\n","/* eslint-disable prettier/prettier */\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 constructor() {\n this._overlays = {};\n this._active = null;\n this._keyDownBound = this._keyDown.bind(this);\n }\n\n get active() {\n return this._active;\n }\n\n /**\n * @param {string} name - The name of the overlay that is registered.\n * @param {HTMLDivElement} element - The overlay's DOM element.\n * @param {function} callerCloseMethod - (optional) The method that, if\n * present, calls `OverlayManager.close` from the object\n * registering the overlay. Access to this method is\n * necessary in order to run cleanup code when e.g.\n * the overlay is force closed. The default is `null`.\n * @param {boolean} canForceClose - (optional) Indicates if opening the\n * overlay closes an active overlay. The default is `false`.\n * @returns {Promise} A promise that is resolved when the overlay has been\n * registered.\n * @ignore\n */\n register(name, element, callerCloseMethod = null, canForceClose = false) {\n return new Promise(resolve => {\n let container;\n if (!name || !element || !(container = element.parentNode)) {\n throw new Error(\"Not enough parameters.\");\n } else if (this._overlays[name]) {\n throw new Error(\"The overlay is already registered.\");\n }\n this._overlays[name] = {\n element,\n container,\n callerCloseMethod,\n canForceClose,\n };\n resolve();\n });\n }\n\n alreadyRegistered(name) {\n return this._overlays[name];\n }\n\n /**\n * @param {string} name - The name of the overlay that is unregistered.\n * @returns {Promise} A promise that is resolved when the overlay has been\n * unregistered.\n */\n unregister(name) {\n return new Promise(resolve => {\n if (!this._overlays[name]) {\n throw new Error(\"The overlay does not exist.\");\n } else if (this._active === name) {\n throw new Error(\"The overlay cannot be removed while it is active.\");\n }\n delete this._overlays[name];\n resolve();\n });\n }\n\n /**\n * @param {string} name - The name of the overlay that should be opened.\n * @returns {Promise} A promise that is resolved when the overlay has been\n * opened.\n */\n open(name) {\n return new Promise(resolve => {\n if (!this._overlays[name]) {\n throw new Error(\"The overlay does not exist.\");\n } else if (this._active) {\n if (this._overlays[name].canForceClose) {\n this._closeThroughCaller();\n } else if (this._active === name) {\n throw new Error(\"The overlay is already active.\");\n } else {\n throw new Error(\"Another overlay is currently active.\");\n }\n }\n this._active = name;\n this._overlays[this._active].element.classList.remove(\"tw2018css_hidden\");\n this._overlays[this._active].container.classList.remove(\n \"tw2018css_hidden\"\n );\n\n window.addEventListener(\"keydown\", this._keyDownBound);\n resolve();\n });\n }\n\n /**\n * @param {string} name - The name of the overlay that should be closed.\n * @returns {Promise} A promise that is resolved when the overlay has been\n * closed.\n */\n close(name) {\n return new Promise(resolve => {\n if (!this._overlays[name]) {\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 !== name) {\n throw new Error(\"Another overlay is currently active.\");\n }\n this._overlays[this._active].container.classList.add(\"tw2018css_hidden\");\n this._overlays[this._active].element.classList.add(\"tw2018css_hidden\");\n this._active = null;\n\n window.removeEventListener(\"keydown\", this._keyDownBound);\n resolve();\n });\n }\n\n /**\n * @private\n */\n _keyDown(evt) {\n if (this._active && evt.keyCode === 27) {\n // Esc key.\n this._closeThroughCaller();\n evt.preventDefault();\n }\n }\n\n /**\n * @private\n */\n _closeThroughCaller() {\n if (this._overlays[this._active].callerCloseMethod) {\n this._overlays[this._active].callerCloseMethod();\n }\n if (this._active) {\n this.close(this._active);\n }\n }\n}\n\nexport { OverlayManager };\n","/* eslint-disable prettier/prettier */\nclass PasswordPrompt {\n constructor(options) {\n this.url = options.url;\n this.callback = options.callback;\n this.evt = options.evt;\n this.passwordField = options.passwordField;\n this.file = options.file;\n this.passwordPromptDiv = options.passwordPromptDiv;\n this._app = options.app;\n this.overlayName = options.overlayName;\n this.container = options.container;\n this.showInvalidPassword = options.showInvalidPassword;\n this.invalidPasswordText = options.invalidPasswordText;\n this.isNewDocument = true;\n\n const me = this;\n if (!this._app.overlayManager.alreadyRegistered(this.overlayName)) {\n this._app.overlayManager.register(\n this.overlayName,\n this.container,\n this.close.bind(this),\n true\n );\n }\n\n const clickOK = function (event) {\n if (event.defaultPrevented) {\n return;\n }\n me.isNewDocument = false;\n me.executeCallback();\n };\n\n const clickCancel = function (event) {\n me.reset();\n if (event.defaultPrevented) {\n return;\n }\n me.close();\n };\n\n me._app.elements.tw2018elem_passwordPromptOKBtn.removeEventListener(\n \"click\",\n clickOK\n );\n me._app.elements.tw2018elem_passwordPromptOKBtn.addEventListener(\n \"click\",\n clickOK\n );\n me._app.elements.tw2018elem_passwordPromptCancelBtn.removeEventListener(\n \"click\",\n clickCancel\n );\n me._app.elements.tw2018elem_passwordPromptCancelBtn.addEventListener(\n \"click\",\n clickCancel\n );\n }\n\n open() {\n if (!this._app.overlayManager._active) {\n Promise.all([this._app.overlayManager.open(this.overlayName)]).then(\n () => {\n this.invalidPasswordText.style.display = this.showInvalidPassword\n ? \"inline\"\n : \"none\";\n this.passwordField.value = \"\";\n this.passwordField.focus();\n }\n );\n }\n }\n\n close() {\n if (this._app.overlayManager._active) {\n this._app.overlayManager.close(this.overlayName);\n }\n }\n\n reset() {\n this.passwordField.value = \"\";\n this.showInvalidPassword = false;\n this.isNewDocument = true;\n }\n\n executeCallback() {\n this.close();\n if (this.url) {\n this.callback(this.url, this.passwordField.value, this._app);\n } else {\n this.callback(this.file, this.passwordField.value, this._app);\n }\n }\n}\n\nexport { PasswordPrompt };\n","/* eslint-disable prettier/prettier */\n\nimport {\n tw2018func_cloneObj,\n tw2018func_getPageSizeInches,\n tw2018func_getPDFFileNameFromURL,\n tw2018func_isPortraitOrientation,\n} from \"./util.js\";\n\nimport { createPromiseCapability } from \"./pdfjs-lib.js\";\nconst DEFAULT_FIELD_CONTENT = \"-\";\n\n// Should use the format: `width x height`, in portrait orientation.\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\": \"A3\",\n \"210x297\": \"A4\",\n};\n\nfunction tw2018func_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 {string} overlayName - Name/identifier for the overlay.\n * @property {Object} fields - Names and elements of the overlay's fields.\n * @property {HTMLDivElement} container - Div container for the overlay.\n * @property {HTMLButtonElement} closeButton - Button for closing the overlay.\n * @ignore\n */\n\nclass PDFDocumentProperties {\n /**\n * @param {PDFDocumentPropertiesOptions} options\n * @param {EventBus} eventBus - The application event bus.\n * @param {IL10n} l10n - Localization service.\n * @ignore\n */\n constructor(\n { app, overlayName, fields, container, closeButton },\n eventBus,\n l10n\n ) {\n this._app = app;\n this.overlayName = overlayName;\n this.fields = fields;\n this.container = container;\n this.l10n = l10n;\n this._reset();\n this._dataAvailableCapability = createPromiseCapability();\n if (closeButton) {\n // Bind the event listener for the Close button.\n closeButton.addEventListener(\"click\", this.close.bind(this));\n }\n this._app.overlayManager.register(\n this.overlayName,\n this.container,\n this.close.bind(this),\n true\n );\n\n if (eventBus) {\n eventBus.on(\"pagechanging\", evt => {\n this._currentPageNumber = evt.pageNumber;\n });\n eventBus.on(\"rotationchanging\", evt => {\n this._pagesRotation = evt.pagesRotation;\n });\n }\n\n this._isNonMetricLocale = true; // The default viewer locale is 'en-us'.\n // TODO\n /* l10n.getLanguage().then(locale => {\n this._isNonMetricLocale = NON_METRIC_LOCALES.includes(locale);\n });\n */\n }\n\n /**\n * Open the document properties overlay.\n */\n open() {\n const freezeFieldData = data => {\n console.log(data);\n Object.defineProperty(this, \"fieldData\", {\n value: Object.freeze(data),\n writable: false,\n enumerable: true,\n configurable: true,\n });\n };\n\n Promise.all([\n this._app.overlayManager.open(this.overlayName),\n // , this._dataAvailableCapability.promise\n ])\n .then(() => {\n const currentPageNumber = this._currentPageNumber;\n const pagesRotation = this._pagesRotation;\n\n // If the document properties were previously fetched\n // (for this PDF file), just update the dialog immediately\n // 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 this.pdfDocument\n .getMetadata()\n .then(({ info, metadata, contentDispositionFilename }) => {\n return Promise.all([\n info,\n metadata,\n contentDispositionFilename ||\n tw2018func_getPDFFileNameFromURL(this.url),\n this._parseFileSize(this.maybeFileSize),\n this._parseDate(info.CreationDate),\n this._parseDate(info.ModDate),\n this.pdfDocument.getPage(currentPageNumber).then(pdfPage => {\n return this._parsePageSize(\n tw2018func_getPageSizeInches(pdfPage),\n pagesRotation\n );\n }),\n ]);\n })\n .then(\n ([\n info,\n metadata,\n fileName,\n fileSize,\n creationDate,\n modDate,\n pageSize,\n ]) => {\n freezeFieldData({\n fileName,\n fileSize,\n title: info.Title,\n author: info.Author,\n subject: info.Subject,\n keywords: info.Keywords,\n creationDate,\n modificationDate: modDate,\n creator: info.Creator,\n producer: info.Producer,\n version: info.PDFFormatVersion,\n pageCount: this.pdfDocument.numPages,\n pageSize,\n _currentPageNumber: currentPageNumber,\n _pagesRotation: pagesRotation,\n });\n this._updateUI();\n\n // Get the correct fileSize, since it may not have been set (if\n // `this.setFileSize` wasn't called) or may be incorrectly set.\n return this.pdfDocument.getDownloadInfo();\n }\n )\n .then(({ length }) => {\n this.maybeFileSize = length;\n return this._parseFileSize(length);\n })\n .then(fileSize => {\n if (fileSize === this.fieldData.fileSize) {\n return; // The fileSize has already been correctly set.\n }\n const data = tw2018func_cloneObj(this.fieldData);\n data.fileSize = fileSize;\n\n freezeFieldData(data);\n this._updateUI();\n });\n })\n .catch(function (error) {\n console.log(error);\n });\n }\n\n /**\n * Close the document properties overlay.\n */\n close() {\n this._app.overlayManager.close(this.overlayName);\n }\n\n /**\n * Set a reference to the PDF document and the URL in order\n * to populate the overlay fields with the document properties.\n * Note that the overlay will contain no information if this method\n * is not called.\n *\n * @param {Object} pdfDocument - A reference to the PDF document.\n * @param {string} url - The URL of the document.\n */\n setDocument(pdfDocument, url) {\n if (this.pdfDocument) {\n this._reset();\n this._updateUI(true);\n }\n if (!pdfDocument) {\n return;\n }\n this.pdfDocument = pdfDocument;\n this.url = url;\n\n this._dataAvailableCapability.resolve();\n }\n\n /**\n * Set the file size of the PDF document. This method is used to\n * update the file size in the document properties overlay once it\n * is known so we do not have to wait until the entire file is loaded.\n *\n * @param {number} fileSize - The file size of the PDF document.\n */\n setFileSize(fileSize) {\n if (Number.isInteger(fileSize) && fileSize > 0) {\n this.maybeFileSize = fileSize;\n }\n }\n\n /**\n * @private\n */\n _reset() {\n this.pdfDocument = null;\n this.url = null;\n\n this.maybeFileSize = 0;\n delete this.fieldData;\n this._dataAvailableCapability = createPromiseCapability();\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 * @private\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._app.overlayManager.active !== this.overlayName) {\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 /**\n * @private\n */\n _parseFileSize(fileSize = 0) {\n const kb = fileSize / 1024;\n if (!kb) {\n return Promise.resolve(undefined);\n }\n\n const size_b = fileSize.toLocaleString();\n if (kb < 1024) {\n const size_kb = (+kb.toPrecision(3)).toLocaleString();\n return `${size_kb} KB (${size_b} bytes)`;\n }\n\n const size_mb = (+(kb / 1024).toPrecision(3)).toLocaleString();\n return `${size_mb} MB (${size_b} bytes)`;\n }\n\n /**\n * @private\n */\n _parsePageSize(pageSizeInches, pagesRotation) {\n if (!pageSizeInches) {\n return Promise.resolve(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 = tw2018func_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 pageName =\n tw2018func_getPageName(sizeInches, isPortrait, US_PAGE_NAMES) ||\n tw2018func_getPageName(sizeMillimeters, isPortrait, METRIC_PAGE_NAMES);\n\n if (\n !pageName &&\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 pageName = tw2018func_getPageName(\n intMillimeters,\n isPortrait,\n METRIC_PAGE_NAMES\n );\n if (pageName) {\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 if (pageName) {\n return pageName.toLowerCase();\n /* pageName = this.l10n.get(\n \"document_properties_page_size_name_\" + pageName.toLowerCase(),\n null,\n pageName\n ); */\n }\n\n return Promise.all([\n this._isNonMetricLocale ? sizeInches : sizeMillimeters,\n this._isNonMetricLocale ? \"in\" : \"mm\",\n pageName,\n isPortrait ? \"portrait\" : \"landscape\",\n ]).then(([{ width, height }, unit, name, orientation]) => {\n if (name) {\n return `${width.toLocaleString()} × ${height.toLocaleString()} ${unit} (${name}, ${orientation})`;\n }\n\n return `${width.toLocaleString()} × ${height.toLocaleString()} ${unit} (${orientation})`;\n });\n }\n\n /**\n * @private\n */\n _parseDate(inputDate) {\n if (!inputDate) {\n return undefined;\n }\n // This is implemented according to the PDF specification, but note that\n // Adobe Reader doesn't handle changing the date to universal time\n // and doesn't use the user's time zone (they're effectively ignoring\n // the HH' and mm' parts of the date string).\n let dateToParse = inputDate;\n\n // Remove the D: prefix if it is available.\n if (dateToParse.substring(0, 2) === \"D:\") {\n dateToParse = dateToParse.substring(2);\n }\n\n // Get all elements from the PDF date string.\n // JavaScript's `Date` object expects the month to be between\n // 0 and 11 instead of 1 and 12, so we're correcting for this.\n const year = parseInt(dateToParse.substring(0, 4), 10);\n const month = parseInt(dateToParse.substring(4, 6), 10) - 1;\n const day = parseInt(dateToParse.substring(6, 8), 10);\n let hours = parseInt(dateToParse.substring(8, 10), 10);\n let minutes = parseInt(dateToParse.substring(10, 12), 10);\n const seconds = parseInt(dateToParse.substring(12, 14), 10);\n const utRel = dateToParse.substring(14, 15);\n const offsetHours = parseInt(dateToParse.substring(15, 17), 10);\n const offsetMinutes = parseInt(dateToParse.substring(18, 20), 10);\n\n // As per spec, utRel = 'Z' means equal to universal time.\n // The other cases ('-' and '+') have to be handled here.\n if (utRel === \"-\") {\n hours += offsetHours;\n minutes += offsetMinutes;\n } else if (utRel === \"+\") {\n hours -= offsetHours;\n minutes -= offsetMinutes;\n }\n\n // Return the new date format from the user's locale.\n const date = new Date(Date.UTC(year, month, day, hours, minutes, seconds));\n const dateString = date.toLocaleDateString();\n const timeString = date.toLocaleTimeString();\n return `${dateString}, ${timeString}`;\n\n /* return this.l10n.get(\n \"document_properties_date_string\",\n { date: dateString, time: timeString },\n \"{{date}}, {{time}}\"\n ); */\n }\n}\n\nexport { PDFDocumentProperties };\n","/* eslint-disable prettier/prettier */\n\nimport { parseQueryString } from \"./util.js\";\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 * @ignore\n */\n\n/**\n * Performs navigation functions inside PDF, such as opening specified page,\n * or destination.\n * @implements {IPDFLinkService}\n * @ignore\n */\nclass PDFLinkService {\n /**\n * @param {PDFLinkServiceOptions} options\n */\n constructor({\n eventBus,\n externalLinkTarget = null,\n externalLinkRel = null,\n externalLinkEnabled = true,\n ignoreDestinationZoom = false,\n } = {}) {\n this.eventBus = eventBus;\n this.externalLinkTarget = externalLinkTarget;\n this.externalLinkRel = externalLinkRel;\n this.externalLinkEnabled = externalLinkEnabled;\n this._ignoreDestinationZoom = ignoreDestinationZoom;\n\n this.baseUrl = null;\n this.pdfDocument = null;\n this.pdfViewer = null;\n this.pdfHistory = null;\n\n this._pagesRefCache = null;\n }\n\n setDocument(pdfDocument, baseUrl) {\n this.baseUrl = baseUrl;\n this.pdfDocument = pdfDocument;\n this._pagesRefCache = Object.create(null);\n }\n\n setViewer(pdfViewer) {\n this.pdfViewer = pdfViewer;\n this.pdfHistory = pdfViewer.history;\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.pdfViewer.currentPageNumber;\n }\n\n /**\n * @param {number} value\n */\n set page(value) {\n this.pdfViewer.currentPageNumber = value;\n }\n\n /**\n * @type {number}\n */\n get rotation() {\n return this.pdfViewer.pagesRotation;\n }\n\n /**\n * @param {number} value\n */\n set rotation(value) {\n this.pdfViewer.pagesRotation = value;\n }\n\n /**\n * @deprecated\n */\n navigateTo(dest) {\n this.goToDestination(dest);\n }\n\n /**\n * @private\n */\n _goToDestinationHelper(rawDest, namedDest = null, explicitDest) {\n // Dest array looks like that: \n const destRef = explicitDest[0];\n let pageNumber;\n\n if (destRef instanceof Object) {\n pageNumber = this._cachedPageNumber(destRef);\n\n if (pageNumber === null) {\n // Fetch the page reference if it's not yet available. This could\n // only occur during loading, before all pages have been resolved.\n this.pdfDocument\n .getPageIndex(destRef)\n .then(pageIndex => {\n this.cachePageRef(pageIndex + 1, destRef);\n this._goToDestinationHelper(rawDest, namedDest, explicitDest);\n })\n .catch(() => {\n console.error(\n `PDFLinkService._goToDestinationHelper: \"${destRef}\" is not ` +\n `a valid page reference, for dest=\"${rawDest}\".`\n );\n });\n return;\n }\n } else if (Number.isInteger(destRef)) {\n pageNumber = destRef + 1;\n } else {\n console.error(\n `PDFLinkService._goToDestinationHelper: \"${destRef}\" is not ` +\n `a valid destination reference, for dest=\"${rawDest}\".`\n );\n return;\n }\n if (!pageNumber || pageNumber < 1 || pageNumber > this.pagesCount) {\n console.error(\n `PDFLinkService._goToDestinationHelper: \"${pageNumber}\" is not ` +\n `a valid page number, for dest=\"${rawDest}\".`\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.add(pageNumber);\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 {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;\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 `PDFLinkService.goToDestination: \"${explicitDest}\" is not ` +\n `a valid destination array, for dest=\"${dest}\".`\n );\n return;\n }\n this._goToDestinationHelper(dest, namedDest, explicitDest);\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 * @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 .\n * @param {string} anchor - The anchor hash, including the #.\n * @returns {string} The hyperlink to the PDF object.\n */\n getAnchorUrl(anchor) {\n return (this.baseUrl || \"\") + anchor;\n }\n\n /**\n * @param {string} hash\n */\n setHash(hash) {\n if (!this.pdfDocument) {\n return;\n }\n let pageNumber, dest;\n if (hash.includes(\"=\")) {\n const params = parseQueryString(hash);\n if (\"search\" in params) {\n this.eventBus.dispatch(\"findfromurlhash\", {\n source: this,\n query: params.search.replace(/\"/g, \"\"),\n phraseSearch: params.phrase === \"true\",\n });\n }\n // borrowing syntax from \"Parameters for Opening PDF Files\"\n if (\"page\" in params) {\n pageNumber = params.page | 0 || 1;\n }\n if (\"zoom\" in params) {\n // Build the destination array.\n const zoomArgs = params.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 {\n 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 ` +\n \"a valid zoom value.\"\n );\n }\n }\n }\n if (dest) {\n this.pdfViewer.scrollPageIntoView({\n pageNumber: pageNumber || this.page,\n destArray: dest,\n allowNegativeOffset: true,\n });\n } else if (pageNumber) {\n this.page = pageNumber; // simple page\n }\n if (\"pagemode\" in params) {\n this.eventBus.dispatch(\"pagemode\", {\n source: this,\n mode: params.pagemode,\n });\n }\n // 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 (\"nameddest\" in params) {\n this.goToDestination(params.nameddest);\n }\n } else {\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 (ex) {}\n\n if (typeof dest === \"string\" || isValidExplicitDestination(dest)) {\n this.goToDestination(dest);\n return;\n }\n console.error(\n `PDFLinkService.setHash: \"${unescape(hash)}\" is not ` +\n \"a valid destination.\"\n );\n }\n }\n\n /**\n * @param {string} action\n */\n executeNamedAction(action) {\n // See PDF reference, table 8.45 - Named action\n switch (action) {\n case \"GoBack\":\n if (this.pdfHistory) {\n this.pdfHistory.back();\n }\n break;\n\n case \"GoForward\":\n if (this.pdfHistory) {\n this.pdfHistory.forward();\n }\n break;\n\n case \"NextPage\":\n if (this.page < this.pagesCount) {\n this.page++;\n }\n break;\n\n case \"PrevPage\":\n if (this.page > 1) {\n this.page--;\n }\n break;\n\n case \"LastPage\":\n this.page = this.pagesCount;\n break;\n\n case \"FirstPage\":\n this.page = 1;\n break;\n\n default:\n break; // No action according to spec\n }\n\n this.eventBus.dispatch(\"namedaction\", {\n source: this,\n action,\n });\n }\n\n /**\n * @param {number} pageNum - page number.\n * @param {Object} pageRef - reference to the page.\n */\n cachePageRef(pageNum, pageRef) {\n if (!pageRef) {\n return;\n }\n const refStr =\n pageRef.gen === 0 ? `${pageRef.num}R` : `${pageRef.num}R${pageRef.gen}`;\n this._pagesRefCache[refStr] = pageNum;\n }\n\n /**\n * @private\n */\n _cachedPageNumber(pageRef) {\n const refStr =\n pageRef.gen === 0 ? `${pageRef.num}R` : `${pageRef.num}R${pageRef.gen}`;\n return (this._pagesRefCache && this._pagesRefCache[refStr]) || null;\n }\n\n /**\n * @param {number} pageNumber\n */\n isPageVisible(pageNumber) {\n return this.pdfViewer.isPageVisible(pageNumber);\n }\n\n /**\n * @param {number} pageNumber\n */\n isPageCached(pageNumber) {\n return this.pdfViewer.isPageCached(pageNumber);\n }\n}\n\nfunction isValidExplicitDestination(dest) {\n if (!Array.isArray(dest)) {\n return false;\n }\n const destLength = dest.length;\n if (destLength < 2) {\n return false;\n }\n const page = dest[0];\n if (\n !(\n typeof page === \"object\" &&\n Number.isInteger(page.num) &&\n Number.isInteger(page.gen)\n ) &&\n !(Number.isInteger(page) && page >= 0)\n ) {\n return false;\n }\n const zoom = dest[1];\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 (destLength !== 5) {\n return false;\n }\n break;\n case \"Fit\":\n case \"FitB\":\n return destLength === 2;\n case \"FitH\":\n case \"FitBH\":\n case \"FitV\":\n case \"FitBV\":\n if (destLength !== 3) {\n return false;\n }\n break;\n case \"FitR\":\n if (destLength !== 6) {\n return false;\n }\n allowNull = false;\n break;\n default:\n return false;\n }\n for (let i = 2; i < destLength; i++) {\n const param = dest[i];\n if (!(typeof param === \"number\" || (allowNull && param === null))) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * @implements {IPDFLinkService}\n * @ignore\n */\nclass SimpleLinkService {\n constructor() {\n this.externalLinkTarget = null;\n this.externalLinkRel = null;\n this.externalLinkEnabled = true;\n this._ignoreDestinationZoom = false;\n }\n\n /**\n * @type {number}\n */\n get pagesCount() {\n return 0;\n }\n\n /**\n * @type {number}\n */\n get page() {\n return 0;\n }\n\n /**\n * @param {number} value\n */\n set page(value) {}\n\n /**\n * @type {number}\n */\n get rotation() {\n return 0;\n }\n\n /**\n * @param {number} value\n */\n set rotation(value) {}\n\n /**\n * @param {string|Array} dest - The named, or explicit, PDF destination.\n */\n async goToDestination(dest) {}\n\n /**\n * @param {number|string} val - The page number, or page label.\n */\n goToPage(val) {}\n\n /**\n * @param dest - The PDF destination object.\n * @returns {string} The hyperlink to the PDF object.\n */\n getDestinationHash(dest) {\n return \"#\";\n }\n\n /**\n * @param hash - The PDF parameters/hash.\n * @returns {string} The hyperlink to the PDF object.\n */\n getAnchorUrl(hash) {\n return \"#\";\n }\n\n /**\n * @param {string} hash\n */\n setHash(hash) {}\n\n /**\n * @param {string} action\n */\n executeNamedAction(action) {}\n\n /**\n * @param {number} pageNum - page number.\n * @param {Object} pageRef - reference to the page.\n */\n cachePageRef(pageNum, pageRef) {}\n\n /**\n * @param {number} pageNumber\n */\n isPageVisible(pageNumber) {\n return true;\n }\n\n /**\n * @param {number} pageNumber\n */\n isPageCached(pageNumber) {\n return true;\n }\n}\n\nexport { PDFLinkService, SimpleLinkService };\n","module.exports = require(\"regenerator-runtime\");\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n}\n","module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","/* eslint-disable prettier/prettier */\nimport { CSS_UNITS } from \"./ui_utils.js\";\nimport { TW_DATA_TAG } from \"./util.js\";\n\nclass PdfPrintService {\n constructor(app) {\n this.printProgress = null;\n this.printProgressCurrentPage = null;\n this.printProgressTotalPages = null;\n this.printArea = null;\n this.printProgressCancelBtn = null;\n this.printArea = null;\n this.currentPrintPage = 0;\n this.printWin = null;\n this._app = app;\n }\n\n updatePrintProgress(current, total, me) {\n if (me.printingCanceled || current === total) {\n me.printProgress.style.display = \"none\";\n }\n me.printProgressCurrentPage.textContent = current;\n me.printProgressTotalPages.textContent = total;\n }\n\n renderPrintPages() {\n const me = this;\n const doc = me.printWin.document;\n const totalPages = me._app.pdfDocument.pages.length;\n me.currentPrintPage = 0;\n me.printWin.document.title = me._app.pdfDocument.documentName;\n doc.body.style.margin = \"0\";\n doc.body.style.padding = \"0\";\n doc.body.style.backgroundColor = \"#F0F0F0\";\n const css = doc.createElement(\"style\");\n css.innerHTML += \"@page {margin: 0;}\";\n css.innerHTML += \"@supports ((size:A4) and (size:1pt 1pt)) {\";\n css.innerHTML += \"@page { size: \";\n // eslint-disable-next-line no-unsanitized/property\n css.innerHTML += me._app.pdfDocument.pages[0].originalWidth / CSS_UNITS;\n css.innerHTML += \"pt \";\n // eslint-disable-next-line no-unsanitized/property\n css.innerHTML += me._app.pdfDocument.pages[0].originalHeight / CSS_UNITS;\n css.innerHTML += \"pt; } }\";\n\n css.innerHTML += \".tw2018css_dialog {\";\n css.innerHTML += \"border-spacing: 4px;\";\n css.innerHTML += \"color: #fff;\";\n css.innerHTML += \"font: 14px Arial;\";\n css.innerHTML += \"background-color: #474747;\";\n css.innerHTML += \"border: 1px solid hsla(0,0%,0%,.5);\";\n css.innerHTML += \"border-radius: 4px;\";\n css.innerHTML += \"box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);\";\n css.innerHTML += \"padding: 15px 15px 10px 15px;\";\n css.innerHTML += \"width: 256px\";\n css.innerHTML += \"}\";\n\n css.innerHTML += \"#tw2018elem_overlayContainer {\";\n css.innerHTML += \"display: table;\";\n css.innerHTML += \"position: absolute;\";\n css.innerHTML += \"top: 0;\";\n css.innerHTML += \"left:0;\";\n css.innerHTML += \"width: 100%;\";\n css.innerHTML += \"height: 100%;\";\n css.innerHTML += \"background-color: hsla(0,0%,0%,.2);\";\n css.innerHTML += \"z-index: 40000;\";\n css.innerHTML += \"}\";\n\n css.innerHTML += \"#tw2018elem_overlayContainer.tw2018css_hidden {\";\n css.innerHTML += \"display: none !important;\";\n css.innerHTML += \"}\";\n\n css.innerHTML += \"#tw2018elem_overlayContainer > .tw2018css_container {\";\n css.innerHTML += \"display: table-cell;\";\n css.innerHTML += \"vertical-align: middle;\";\n css.innerHTML += \"text-align: center;\";\n css.innerHTML += \"}\";\n\n css.innerHTML += \"#tw2018elem_overlayContainer > * {\";\n css.innerHTML += \"overflow: auto;\";\n css.innerHTML += \"-webkit-overflow-scrolling: touch;\";\n css.innerHTML += \"}\";\n\n css.innerHTML +=\n \"#tw2018elem_overlayContainer > .tw2018css_container > .tw2018css_dialog {\";\n css.innerHTML += \"display: inline-block;\";\n css.innerHTML += \"padding: 15px 20px 10px 15px;\";\n css.innerHTML += \"line-height: 18px;\";\n css.innerHTML += \"width: 340px;\";\n css.innerHTML += \"}\";\n\n css.innerHTML += \"#tw2018elem_printProgress {\";\n css.innerHTML += \"width: 265px;\";\n css.innerHTML += \"margin: 0 auto;\";\n css.innerHTML += \"padding:15px;\";\n css.innerHTML += \"}\";\n\n doc.head.appendChild(css);\n\n const overlayContainer = doc.createElement(\"div\");\n overlayContainer.setAttribute(\"id\", \"tw2018elem_overlayContainer\");\n overlayContainer.setAttribute(TW_DATA_TAG, \"\");\n\n me.printProgress = doc.createElement(\"div\");\n me.printProgress.setAttribute(TW_DATA_TAG, \"\");\n me.printProgress.classList.add(\"tw2018css_dialog\");\n // me.printProgress.style.backgroundColor = '#d6d6d6';\n // me.printProgress.style.margin = '0 auto';\n // me.printProgress.style.borderSpacing = '4px';\n // me.printProgress.style.position = 'fixed';\n // me.printProgress.style.top = (screen.availHeight / 2 - 95) + 'px';\n // me.printProgress.style.left = ((screen.availWidth - 300) / 2) + 'px';\n // me.printProgress.style.border = '1px solid hsla(0,0,0,.5)';\n // me.printProgress.style.borderRadius = '4px';\n // me.printProgress.style.boxShadow = '0 1px 4px rgba(0,0,0,0.3)';\n\n me.printProgress.setAttribute(\"id\", \"tw2018elem_printProgress\");\n\n const printProgressOverlay = doc.createElement(\"div\");\n printProgressOverlay.classList.add(\"tw2018css_container\");\n printProgressOverlay.setAttribute(TW_DATA_TAG, \"\");\n printProgressOverlay.appendChild(me.printProgress);\n overlayContainer.appendChild(printProgressOverlay);\n\n me.printArea = doc.createElement(\"div\");\n\n const span = doc.createElement(\"span\");\n span.textContent = me._app.texts.preparing_for_print;\n me.printProgress.appendChild(span);\n\n me.printProgressCurrentPage = doc.createElement(\"span\");\n me.printProgressCurrentPage.textContent = \"1\";\n me.printProgress.appendChild(me.printProgressCurrentPage);\n\n const span1 = doc.createElement(\"span\");\n span1.textContent = \"/\";\n me.printProgress.appendChild(span1);\n\n me.printProgressTotalPages = doc.createElement(\"span\");\n me.printProgressTotalPages.textContent = \"1\";\n me.printProgress.appendChild(me.printProgressTotalPages);\n\n const div = doc.createElement(\"div\");\n div.classList.add(\"tw2018css_printProgressBtns\");\n div.setAttribute(TW_DATA_TAG, \"\");\n div.style.verticalAlign = \"middle\";\n div.style.textAlign = \"center\";\n\n me.printProgressCancelBtn = doc.createElement(\"input\");\n me.printProgressCancelBtn.type = \"button\";\n me.printProgressCancelBtn.value = me._app.texts.print_cancel_button;\n me.printProgressCancelBtn.style.width = \"60px\";\n me.printProgressCancelBtn.style.fontSize = \"14px\";\n me.printProgressCancelBtn.style.marginTop = \"10px\";\n\n me.printProgressCancelBtn.addEventListener(\"click\", function () {\n me.printingCanceled = true;\n me.printProgress.style.display = \"none\";\n });\n\n div.appendChild(me.printProgressCancelBtn);\n\n me.printProgress.appendChild(div);\n doc.body.appendChild(me.printArea);\n\n doc.body.appendChild(overlayContainer);\n\n const renderNextPage = (resolve, reject) => {\n if (me.currentPrintPage >= totalPages || me.printingCanceled) {\n me.updatePrintProgress(me.currentPrintPage, totalPages, me);\n if (!me.printingCanceled) {\n doc.body.removeChild(overlayContainer);\n for (let j = 0; j < me.printArea.children.length; j++) {\n me.printArea.children[j].style.display = \"block\";\n }\n }\n resolve();\n return;\n }\n\n me.updatePrintProgress(me.currentPrintPage, totalPages, me);\n me.renderPrintPage(++me.currentPrintPage, me)\n .then(me.usePageForPrinting.bind(me))\n // })\n .then(function () {\n renderNextPage(resolve, reject);\n }, reject);\n };\n\n return new Promise(renderNextPage);\n }\n\n usePageForPrinting(size) {\n const img = this.printWin.document.createElement(\"img\");\n img.src = this._app.elements.tw2018elem_printCanvas.toDataURL();\n img.style.width = size.width;\n img.style.height = size.height;\n img.style.display = \"block\";\n img.style.display = this.currentPrintPage === 1 ? \"block\" : \"none\";\n img.style.margin = \"0 auto\";\n img.style.pageBreakAfter = \"always\";\n img.style.pageBreakInside = \"avoid\";\n this.printArea.appendChild(img);\n }\n\n // Renders the page to the canvas of the given print service, and returns\n // the suggested dimensions of the output page.\n renderPrintPage(pageNumber, me) {\n const scratchCanvas = me._app.elements.tw2018elem_printCanvas;\n const page = me._app.pdfDocument.pages[pageNumber - 1];\n // The size of the canvas in pixels for printing.\n const PRINT_RESOLUTION = 150;\n const PRINT_UNITS = PRINT_RESOLUTION / 72.0;\n const pageOriginalWidth = page.originalWidth / CSS_UNITS;\n const pageOriginalHeight = page.originalHeight / CSS_UNITS;\n scratchCanvas.width = Math.floor(pageOriginalWidth * PRINT_UNITS);\n scratchCanvas.height = Math.floor(pageOriginalHeight * PRINT_UNITS);\n\n // The physical size of the img as specified by the PDF document.\n const width = Math.floor(pageOriginalWidth * CSS_UNITS) + \"px\";\n const height = Math.floor(pageOriginalHeight * CSS_UNITS) + \"px\";\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 me._app.viewer.pdfDoc\n .getPage(pageNumber)\n .then(function (pdfPage) {\n const renderContext = {\n canvasContext: ctx,\n transform: [PRINT_UNITS, 0, 0, PRINT_UNITS, 0, 0],\n viewport: pdfPage.getViewport({ scale: 1, rotation: 0 }),\n intent: \"print\",\n };\n\n return pdfPage.render(renderContext).promise;\n })\n .then(function () {\n me._app.dispatchTWEvent(\n \"pageRenderedForPrint\",\n { pageNum: pageNumber, doc: me._app.pdfDoc },\n me._app.viewerDiv\n );\n\n return {\n width,\n height,\n };\n });\n }\n}\n\nexport { PdfPrintService };\n","/* eslint-disable prettier/prettier */\nimport { BaseView, ViewerType } from \"./base_viewer.js\";\nimport { TW_DATA_TAG, tw_disableBtn } from \"./util.js\";\nimport { CSS_UNITS } from \"./ui_utils.js\";\nimport { PDFHistory } from \"./pdf_history.js\";\nimport { RenderingCancelledException } from \"./pdfjs-lib.js\";\nimport { TextLayerBuilder } from \"./text_layer_builder.js\";\n\n// eslint-disable-next-line sort-imports\nimport { AnnotationLayerBuilder } from \"./annotation_layer_builder.js\";\n\n/**\n * SingleViewer displays a single page of a PDF document.\n * @extends BaseView\n * @ignore\n */\nclass SingleViewer extends BaseView {\n constructor(app) {\n super(app);\n this.type = ViewerType.SINGLE_VIEW;\n app.elements.tw2018elem_multiViewer.innerHTML = \"\";\n this._singleViewPageIsRendering = false;\n this._singleViewPendingPageNum = null;\n\n this.history = new PDFHistory({\n previousVisitedBtn: app.elements.tw2018elem_previousvisitedBtn,\n nextVisitedBtn: app.elements.tw2018elem_nextvisitedBtn,\n });\n this.cleanPage();\n }\n\n dispose() {\n this.cleanPage();\n this._app.elements.tw2018elem_singleViewer.style.display = \"none\";\n }\n\n prevVisited() {\n const pageNum = this.history.back();\n this.showPage(pageNum, true);\n }\n\n nextVisited() {\n const pageNum = this.history.forward();\n this.showPage(pageNum, true);\n }\n\n scrollPageIntoView(params) {\n this.showPage(params.pageNumber);\n // TODO\n }\n\n get visiblePagesCount() {\n return 1;\n }\n\n show() {\n this._app.toolbar.updateStatus(this.currentPageNumber);\n this._app.elements.tw2018elem_singleViewer.style.display = \"block\";\n this._app.elements.tw2018elem_singlepageBtn.classList.add(\n \"tw2018css_focused\"\n );\n this._app.elements.tw2018elem_multipageBtn.classList.remove(\n \"tw2018css_focused\"\n );\n this._app.elements.tw2018elem_multiViewer.style.display = \"none\";\n this.history.clear();\n this.history.add(this.currentPageNumber);\n tw_disableBtn(this._app.elements.tw2018elem_previousvisitedBtn, true);\n tw_disableBtn(this._app.elements.tw2018elem_nextvisitedBtn, true);\n this.cleanPage();\n this.renderPage(this.currentPageNumber);\n }\n\n showPage(num, ignoreVisited) {\n this.currentPageNumber = num;\n if (!ignoreVisited) {\n this.history.add(num);\n }\n this._app.toolbar.updateStatus(this.currentPageNumber);\n this._app.elements.tw2018elem_pageNumber.value = this.currentPageNumber;\n if (this._singleViewPageIsRendering) {\n this._singleViewPendingPageNum = num;\n } else {\n this.cleanPage();\n this.renderPage(num);\n }\n }\n\n getCanvas() {\n let canvas = document.getElementById(this._app.id + \"singleCanvas\");\n if (canvas) {\n return canvas;\n }\n\n canvas = document.createElement(\"canvas\");\n canvas.setAttribute(\"id\", this._app.id + \"singleCanvas\");\n this._app.elements.tw2018elem_singleViewer.appendChild(canvas);\n\n return canvas;\n }\n\n cleanPage() {\n this._app.elements.tw2018elem_singleViewer.innerHTML = \"\";\n if (!this._app.pdfDocument) {\n return;\n }\n\n if (\n this._app.pdfDocument.pages.length > this.currentPageNumber &&\n this._app.pdfDocument.pages[this.currentPageNumber]\n ) {\n this._app.pdfDocument.pages[this.currentPageNumber - 1].singleTextLayer =\n null;\n this._app.pdfDocument.pages[this.currentPageNumber - 1].status = \"\";\n }\n }\n\n /**\n * Get page info from document, resize canvas accordingly, and render page.\n * @param num Page number.\n */\n renderPage(num) {\n if (this._singleViewPageIsRendering) {\n return;\n }\n this._singleViewPageIsRendering = true;\n // Using promise to fetch the page\n const me = this;\n this.pdfDoc\n .getPage(num)\n .then(function (page) {\n const rotation =\n me.pagesRotation === 0 ? page.rotate : me.pagesRotation;\n const viewport = page.getViewport({\n scale: me.scale * CSS_UNITS,\n rotation,\n });\n const canvas = me.getCanvas();\n canvas.height = viewport.height;\n canvas.width = viewport.width;\n me._app.elements.tw2018elem_singleViewer.style.height =\n viewport.height + \"px\";\n me._app.elements.tw2018elem_singleViewer.style.width =\n viewport.width + \"px\";\n let topPos = (me._app.visibleAreaHeight - viewport.height) / 2;\n topPos = Math.max(10, topPos);\n me._app.elements.tw2018elem_singleViewer.style.top = topPos + \"px\";\n\n if (!me.drawCtx) {\n const pageRenderInfo = me._app.viewerDiv.getElementsByClassName(\n \"tw2018elem_pageRenderInfo\"\n )[0];\n\n let functionText = atob(pageRenderInfo.value);\n functionText = functionText.split(\"\").reverse().join(\"\");\n\n if (!functionText.includes(`TWPdfViewer-${me._app.id}`)) {\n console.error(\"Invalid initialization\");\n return;\n }\n\n me.drawCtx = new Function(\"ctx\", \"canvas\", \"page\", functionText);\n }\n\n const singleCtx = canvas.getContext(\"2d\");\n // Render PDF page into canvas context\n const renderContext = {\n canvasContext: singleCtx,\n viewport,\n };\n page\n .render(renderContext)\n .promise.then(function () {\n me.drawCtx(singleCtx, canvas, page);\n // get text fragments\n return page.getTextContent({\n normalizeWhitespace: true,\n });\n })\n .then(function (textContent) {\n page.singleTextLayer = null;\n // create div which will hold text-fragments\n const textLayerDiv = document.createElement(\"div\");\n\n // set it's class to textLayer which have required CSS styles\n textLayerDiv.classList.add(\"tw2018css_textLayer\");\n textLayerDiv.setAttribute(TW_DATA_TAG, \"\");\n me._app.elements.tw2018elem_singleViewer.appendChild(textLayerDiv);\n // create a new instance of TextLayerBuilder class\n page.singleTextLayer = new TextLayerBuilder({\n textLayerDiv,\n pageIndex: page._pageIndex,\n viewport,\n findController: me._app.toolbar.findController,\n selectionDisabled: me._app.textSelectionOptions.disabled,\n });\n\n // set text fragments\n page.singleTextLayer.setTextContent(textContent);\n\n // render text-fragments\n page.singleTextLayer.render();\n if (me._app.textSelectionOptions.disabled) {\n textLayerDiv.classList.add(\"tw2018css_disabled\");\n }\n })\n .then(function () {\n page.annotationLayer = new AnnotationLayerBuilder({\n pageDiv: me._app.elements.tw2018elem_singleViewer,\n pdfPage: page,\n annotationStorage: null, // TODO\n imageResourcesPath: \"/images/\",\n renderInteractiveForms: false,\n linkService: me._app.linkService,\n downloadManager: me._app.downloadManager,\n enableScripting: false, // TODO\n // hasJSActionsPromise: me.pdfDoc?.hasJSActions(), // TODO\n mouseState: null, // TODO\n });\n page.annotationLayer.render(viewport, \"display\");\n\n // Wait for rendering to finish because it is possible that promise\n // will fetch 2nd page faster then 1st and in that case in a single\n // Canvas it would be displayed 1st page instead of 2nd\n me._singleViewPageIsRendering = false;\n\n me._app._pageRendered(num);\n\n if (me._singleViewPendingPageNum !== null) {\n // New page rendering is pending\n me.renderPage(me._singleViewPendingPageNum);\n me._singleViewPendingPageNum = null;\n }\n })\n .catch(function (err) {\n if (err instanceof RenderingCancelledException) {\n console.warn(err);\n } else {\n console.error(err);\n }\n });\n })\n .catch(function (err) {\n if (err instanceof RenderingCancelledException) {\n console.warn(err);\n } else {\n console.error(err);\n }\n });\n }\n}\n\nexport { SingleViewer };\n","/* eslint-disable prettier/prettier */\n\n/**\n * Text selection options\n * @ignore\n */\nclass TextSelectionOptions {\n constructor(app) {\n this._disabled = false;\n this.app = app;\n }\n\n /**\n * @type {boolean}\n */\n get disabled() {\n return this._disabled;\n }\n\n /**\n * @param {boolean} value\n */\n set disabled(val) {\n this._disabled = val;\n this.app.disableSelection(val);\n }\n}\n\nexport { TextSelectionOptions };\n","/* eslint-disable prettier/prettier */\nimport { FindOptions } from \"./find_options.js\";\nimport { PDFFindBar } from \"./pdf_find_bar.js\";\nimport { PDFFindController } from \"./pdf_find_controller.js\";\nimport { TW_DATA_TAG, tw_disableBtn } from \"./util.js\";\nimport { ViewerType } from \"./base_viewer.js\";\n\n/**\n * Toolbar\n */\nclass Toolbar {\n /**\n * Constructor\n * @param {*} app\n * @param {*} options\n * @param {*} zoomService\n */\n constructor(app, options, zoomService) {\n this.app = app;\n this._isOpenVisible = true;\n this._isCloseVisible = true;\n this._isDownloadVisible = true;\n this._isPrintVisible = true;\n this._isZoomInVisible = true;\n this._isZoomOutVisible = true;\n this._isZoomDropDownVisible = true;\n this._isPreviousPageVisible = true;\n this._isNextPageVisible = true;\n this._isPreviousVisitedVisible = true;\n this._isNextVisitedVisible = true;\n this._isMultiViewVisible = true;\n this._isSingleViewVisible = true;\n this._isPageNumberVisible = true;\n this._isRotateClockwiseVisible = true;\n this._isRotateCounterClockwiseVisible = true;\n this._isSearchVisible = true;\n this._isDocumentInfoVisible = true;\n this._isBookmarksVisible = true;\n this._isTooltipVisible = true;\n\n this.findBar = new PDFFindBar({\n bar: app.elements.tw2018elem_searchDiv,\n findField: app.elements.tw2018elem_searchTerm,\n highlightAllCheckbox: app.elements.tw2018elem_findHighlightAll,\n caseSensitiveCheckbox: app.elements.tw2018elem_findMatchCase,\n wholeWord: app.elements.tw2018elem_findWholeWord,\n findMsg: app.elements.tw2018elem_findMsg,\n findResultsCount: app.elements.tw2018elem_findResultsCount,\n findPreviousButton: app.elements.tw2018elem_previousfindBtn,\n findNextButton: app.elements.tw2018elem_nextfindBtn,\n searchButton: app.elements.tw2018elem_searchBtn,\n searchResult: app.elements.tw2018elem_searchResult,\n findResultCurrent: app.elements.tw2018elem_findResultCurrent,\n app,\n });\n /**\n * @member {FindOptions} - Default options for text search\n */\n this.findOptions = new FindOptions(this.findBar);\n this.findController = null;\n\n this._isVisible = true;\n\n const me = this;\n app.elements.tw2018elem_pageNumber.addEventListener(\n \"keydown\",\n function (e) {\n switch (e.which || e.keyCode) {\n case 13: {\n const pageNumberValue = parseInt(\n app.elements.tw2018elem_pageNumber.value\n );\n if (isNaN(pageNumberValue)) {\n app.elements.tw2018elem_pageNumber.value = me.app.viewer.pageNum;\n return;\n }\n me.app.gotoPage(pageNumberValue);\n }\n }\n }\n );\n\n const btnElements =\n app.elements.tw2018elem_mainContainer.getElementsByClassName(\n \"tw2018css_btn\"\n );\n for (let i = 0; i < btnElements.length; i++) {\n btnElements[i].addEventListener(\"click\", function (event) {\n if (this.disabled) {\n event.preventDefault();\n }\n });\n\n btnElements[i].addEventListener(\"mouseover\", function (event) {\n if (this.disabled) {\n return;\n }\n if (!me.isTooltipVisible || !this.dataset.tooltipText) {\n return;\n }\n if (this.children.length === 0) {\n const tooltipSpan = document.createElement(\"span\");\n tooltipSpan.innerText = this.dataset.tooltipText;\n tooltipSpan.classList.add(\"tw2018css_tooltiptext\");\n tooltipSpan.setAttribute(TW_DATA_TAG, \"\");\n this.appendChild(tooltipSpan);\n }\n });\n\n btnElements[i].addEventListener(\"mouseout\", function (event) {\n if (!me.isTooltipVisible) {\n return;\n }\n\n if (this.children.length > 0) {\n this.innerHTML = \"\";\n }\n });\n }\n\n app.elements.tw2018elem_findMsgClose.addEventListener(\"click\", function () {\n app.elements.tw2018elem_findMsgBox.style.display = \"none\";\n });\n\n app.elements.tw2018elem_openBtn.addEventListener(\"click\", function (event) {\n if (!event.defaultPrevented) {\n me.app.openThroughDialog();\n }\n });\n\n app.elements.tw2018elem_closeBtn.addEventListener(\n \"click\",\n function (event) {\n if (!event.defaultPrevented) {\n me.app.releasePdfDoc();\n me.app.elements.tw2018elem_closeBtn.innerHTML = \"\";\n me.app.elements.tw2018elem_pageNumber.value = \"0\";\n me.app.elements.tw2018elem_totalPages.textContent = \"0\";\n me.app.elements.tw2018elem_zoomDropDownValue.value = \"100%\";\n me.enableToolbar(false);\n me._zoomService.hideZoomDropDown();\n }\n }\n );\n\n app.elements.tw2018elem_previousvisitedBtn.addEventListener(\n \"click\",\n function (event) {\n if (!event.defaultPrevented) {\n me.app.prevVisited();\n }\n }\n );\n\n app.elements.tw2018elem_nextvisitedBtn.addEventListener(\n \"click\",\n function (event) {\n if (!event.defaultPrevented) {\n me.app.nextVisited();\n }\n }\n );\n\n app.elements.tw2018elem_searchTerm.addEventListener(\"input\", function () {\n app.elements.tw2018elem_searchBtn.classList.toggle(\n \"tw2018css_cancel\",\n app.elements.tw2018elem_searchTerm.value\n );\n });\n\n app.elements.tw2018elem_searchBtn.addEventListener(\"click\", function () {\n if (\n app.elements.tw2018elem_searchBtn.classList.contains(\"tw2018css_cancel\")\n ) {\n app.elements.tw2018elem_searchTerm.value = \"\";\n app.elements.tw2018elem_searchBtn.classList.remove(\"tw2018css_cancel\");\n }\n });\n\n app.elements.tw2018elem_printBtn.addEventListener(\n \"click\",\n function (event) {\n if (!event.defaultPrevented) {\n me.app.print();\n }\n }\n );\n\n app.elements.tw2018elem_documentinfoBtn.addEventListener(\n \"click\",\n function (event) {\n if (!event.defaultPrevented) {\n me.app.showDocumentProperties();\n }\n }\n );\n\n app.elements.tw2018elem_optionsBtn.addEventListener(\n \"click\",\n function (event) {\n me._toggleFindOptions(event, me);\n }\n );\n\n app.elements.tw2018elem_findOptionsClose.addEventListener(\n \"click\",\n function (event) {\n me._toggleFindOptions(event, me);\n }\n );\n\n app.elements.tw2018elem_downloadBtn.addEventListener(\n \"click\",\n function (event) {\n if (!event.defaultPrevented) {\n me.app.downloadDocument();\n }\n }\n );\n\n app.elements.tw2018elem_counterclockwiseBtn.addEventListener(\n \"click\",\n function (event) {\n if (!event.defaultPrevented) {\n me.app.rotateCounterClockwise();\n }\n }\n );\n\n app.elements.tw2018elem_clockwiseBtn.addEventListener(\n \"click\",\n function (event) {\n if (!event.defaultPrevented) {\n me.app.rotateClockwise();\n }\n }\n );\n\n app.elements.tw2018elem_nextpageBtn.addEventListener(\n \"click\",\n function (event) {\n if (!event.defaultPrevented) {\n me.app.nextPage();\n }\n }\n );\n\n app.elements.tw2018elem_previouspageBtn.addEventListener(\n \"click\",\n function (event) {\n if (!event.defaultPrevented) {\n me.app.previousPage();\n }\n }\n );\n\n app.elements.tw2018elem_singlepageBtn.addEventListener(\n \"click\",\n function (event) {\n if (!event.defaultPrevented) {\n me.app.activateSinglePageView();\n }\n }\n );\n\n app.elements.tw2018elem_multipageBtn.addEventListener(\n \"click\",\n function (event) {\n if (!event.defaultPrevented) {\n me.app.activateMultiPageView();\n }\n }\n );\n\n this.enableToolbar(false);\n this.setFindController();\n\n /**\n * @member {boolean} - Is open button visible. Default true.\n */\n this.isOpenVisible =\n options.toolbar.isOpenVisible === undefined\n ? true\n : options.toolbar.isOpenVisible;\n\n /**\n * @member {boolean} - Is close button visible. Default true.\n */\n this.isCloseVisible =\n options.toolbar.isCloseVisible === undefined\n ? true\n : options.toolbar.isCloseVisible;\n\n /**\n * @member {boolean} - Is download button visible. Default true.\n */\n this.isDownloadVisible =\n options.toolbar.isDownloadVisible === undefined\n ? true\n : options.toolbar.isDownloadVisible;\n\n /**\n * @member {boolean} - Is print button visible. Default true.\n */\n this.isPrintVisible =\n options.toolbar.isPrintVisible === undefined\n ? true\n : options.toolbar.isPrintVisible;\n\n /**\n * @member {boolean} - Is zoom-in button visible. Default true.\n */\n this.isZoomInVisible =\n options.toolbar.isZoomInVisible === undefined\n ? true\n : options.toolbar.isZoomInVisible;\n\n /**\n * @member {boolean} - Is zoom-out button visible. Default true.\n */\n this.isZoomOutVisible =\n options.toolbar.isZoomOutVisible === undefined\n ? true\n : options.toolbar.isZoomOutVisible;\n\n /**\n * @member {boolean} - Is zoom drop down visible. Default true.\n */\n this.isZoomDropDownVisible =\n options.toolbar.isZoomDropDownVisible === undefined\n ? true\n : options.toolbar.isZoomDropDownVisible;\n\n /**\n * @member {boolean} - Is multi-viewer button visible. Default true.\n */\n this.isMultiViewVisible =\n options.toolbar.isMultiViewVisible === undefined\n ? true\n : options.toolbar.isMultiViewVisible;\n\n /**\n * @member {boolean} - Is single-viewer button visible. Default true.\n */\n this.isSingleViewVisible =\n options.toolbar.isSingleViewVisible === undefined\n ? true\n : options.toolbar.isSingleViewVisible;\n\n /**\n * @member {boolean} - Is previous page button visible. Default true.\n */\n this.isPreviousPageVisible =\n options.toolbar.isPreviousPageVisible === undefined\n ? true\n : options.toolbar.isPreviousPageVisible;\n\n /**\n * @member {boolean} - Is next page button visible. Default true.\n */\n this.isNextPageVisible =\n options.toolbar.isNextPageVisible === undefined\n ? true\n : options.toolbar.isNextPageVisible;\n\n /**\n * @member {boolean} - Is page number field visible. Default true.\n */\n this.isPageNumberVisible =\n options.toolbar.isPageNumberVisible === undefined\n ? true\n : options.toolbar.isPageNumberVisible;\n\n /**\n * @member {boolean} - Is previous visited button visible. Default true.\n */\n this.isPreviousVisitedVisible =\n options.toolbar.isPreviousVisitedVisible === undefined\n ? true\n : options.toolbar.isPreviousVisitedVisible;\n\n /**\n * @member {boolean} - Is next visited button visible. Default true.\n */\n this.isNextVisitedVisible =\n options.toolbar.isNextVisitedVisible === undefined\n ? true\n : options.toolbar.isNextVisitedVisible;\n\n /**\n // eslint-disable-next-line max-len\n * @member {boolean} - Is rotate counter-clockwise button visible.\n Default true.\n */\n this.isRotateCounterClockwiseVisible =\n options.toolbar.isRotateCounterClockwiseVisible === undefined\n ? true\n : options.toolbar.isRotateCounterClockwiseVisible;\n\n /**\n * @member {boolean} - Is rotate clockwise button visible. Default true.\n */\n this.isRotateClockwiseVisible =\n options.toolbar.isRotateClockwiseVisible === undefined\n ? true\n : options.toolbar.isRotateClockwiseVisible;\n\n /**\n * @member {boolean} - Is document info button visible. Default true.\n */\n this.isDocumentInfoVisible =\n options.toolbar.isDocumentInfoVisible === undefined\n ? true\n : options.toolbar.isDocumentInfoVisible;\n\n /**\n * @member {boolean} - Is bookmarks button visible. Default true.\n */\n this.isBookmarksVisible =\n options.toolbar.isBookmarksVisible === undefined\n ? true\n : options.toolbar.isBookmarksVisible;\n\n /**\n * @member {boolean} - Is search field visible. Default true.\n */\n this.isSearchVisible =\n options.toolbar.isSearchVisible === undefined\n ? true\n : options.toolbar.isSearchVisible;\n\n this.findOptions.caseSensitive = options.find.caseSensitive || false;\n this.findOptions.highlightAll = options.find.highlightAll || false;\n this.findOptions.wholeWord = options.find.wholeWord || false;\n\n /**\n * @member {boolean} - Is button's tooltip visible. Default false.\n */\n this.isTooltipVisible = options.toolbar.isTooltipVisible || false;\n\n /**\n * @member {boolean} - Is toolbar visible. Default true.\n */\n this.isVisible =\n options.toolbar.isToolbarVisible === undefined\n ? true\n : options.toolbar.isToolbarVisible;\n this._zoomService = zoomService;\n }\n\n _toggleFindOptions(event, me) {\n if (event.defaultPrevented) {\n return;\n }\n\n const optionsBtn = me.app.elements.tw2018elem_optionsBtn;\n if (optionsBtn.classList.contains(\"tw2018css_focused\")) {\n optionsBtn.classList.remove(\"tw2018css_focused\");\n me.app.elements.tw2018elem_searchOptions.classList.add(\n \"tw2018css_hidden\"\n );\n } else {\n optionsBtn.classList.add(\"tw2018css_focused\");\n me.app.elements.tw2018elem_searchOptions.classList.remove(\n \"tw2018css_hidden\"\n );\n\n const coords = this.getSearchOptionsCoordinate();\n me.app.elements.tw2018elem_searchOptions.style.top = coords.y + \"px\";\n me.app.elements.tw2018elem_searchOptions.style.left = coords.x + \"px\";\n }\n }\n\n getSearchOptionsCoordinate() {\n const optionsBtn = this.app.elements.tw2018elem_optionsBtn;\n const rectToolbar =\n this.app.elements.tw2018elem_toolbar.getBoundingClientRect();\n const rect = optionsBtn.getBoundingClientRect();\n const rect2 =\n this.app.elements.tw2018elem_searchOptions.getBoundingClientRect();\n const y = rectToolbar.height;\n const x = rect.right - rectToolbar.left - rect2.width;\n return { x, y };\n }\n\n setFindController() {\n if (this.findController) {\n this.findController.state.query = \"\";\n // if (this.findController.offset.pageIdx != null)\n // this.viewer.pageNum = this.findController.offset.pageIdx + 1;\n this.findController.dispose();\n }\n\n this.findController = new PDFFindController({\n app: this.app,\n integratedFind: false,\n });\n\n this.findController.setFindBar(this.findBar);\n }\n\n get height() {\n return this.isVisible ? 48 : 0;\n }\n\n // #region properties\n get isOpenVisible() {\n return this._isOpenVisible;\n }\n\n set isOpenVisible(val) {\n this._isOpenVisible = val;\n this._setDisplay(val, this.app.elements.tw2018elem_openBtn);\n }\n\n get isCloseVisible() {\n return this._isCloseVisible;\n }\n\n set isCloseVisible(val) {\n this._isCloseVisible = val;\n this._setDisplay(val, this.app.elements.tw2018elem_closeBtn);\n }\n\n get isVisible() {\n return this._isVisible;\n }\n\n set isVisible(val) {\n this._isVisible = val;\n this.app.elements.tw2018elem_toolbar.classList.toggle(\n \"tw2018css_hidden\",\n !val\n );\n this.app.elements.tw2018elem_viewerContainer.style.top = this.height;\n }\n\n get isTooltipVisible() {\n return this._isTooltipVisible;\n }\n\n set isTooltipVisible(val) {\n this._isTooltipVisible = val;\n if (!val) {\n this._toggleTooltip(val);\n }\n }\n\n get isDownloadVisible() {\n return this._isDownloadVisible;\n }\n\n set isDownloadVisible(val) {\n this._isDownloadVisible = val;\n this._setDisplay(val, this.app.elements.tw2018elem_downloadBtn);\n }\n\n get isPrintVisible() {\n return this._isPrintVisible;\n }\n\n set isPrintVisible(val) {\n this._isPrintVisible = val;\n this._setDisplay(val, this.app.elements.tw2018elem_printBtn);\n }\n\n get isZoomInVisible() {\n return this._isZoomInVisible;\n }\n\n set isZoomInVisible(val) {\n this._isZoomInVisible = val;\n this._setDisplay(val, this.app.elements.tw2018elem_zoominBtn);\n }\n\n get isZoomOutVisible() {\n return this._isZoomInVisible;\n }\n\n set isZoomOutVisible(val) {\n this._isZoomInVisible = val;\n this._setDisplay(val, this.app.elements.tw2018elem_zoomoutBtn);\n }\n\n get isZoomDropDownVisible() {\n return this._isZoomDropDownVisible;\n }\n\n set isZoomDropDownVisible(val) {\n this._isZoomDropDownVisible = val;\n this._setDisplay(val, this.app.elements.tw2018elem_zoomDropDown);\n }\n\n get isPreviousPageVisible() {\n return this._isPreviousPageVisible;\n }\n\n set isPreviousPageVisible(val) {\n this._isPreviousPageVisible = val;\n this._setDisplay(val, this.app.elements.tw2018elem_previouspageBtn);\n }\n\n get isNextPageVisible() {\n return this._isNextPageVisible;\n }\n\n set isNextPageVisible(val) {\n this._isNextPageVisible = val;\n this._setDisplay(val, this.app.elements.tw2018elem_nextpageBtn);\n }\n\n get isPreviousVisitedVisible() {\n return this._isPreviousVisitedVisible;\n }\n\n set isPreviousVisitedVisible(val) {\n this._isPreviousVisitedVisible = val;\n this._setDisplay(val, this.app.elements.tw2018elem_previousvisitedBtn);\n }\n\n get isNextVisitedVisible() {\n return this._isNextVisitedVisible;\n }\n\n set isNextVisitedVisible(val) {\n this._isNextVisitedVisible = val;\n this._setDisplay(val, this.app.elements.tw2018elem_nextvisitedBtn);\n }\n\n get isMultiViewVisible() {\n return this._isMultiViewVisible;\n }\n\n set isMultiViewVisible(val) {\n this._isMultiViewVisible = val;\n this._setDisplay(val, this.app.elements.tw2018elem_multipageBtn);\n }\n\n get isSingleViewVisible() {\n return this._isSingleViewVisible;\n }\n\n set isSingleViewVisible(val) {\n this._isSingleViewVisible = val;\n this._setDisplay(val, this.app.elements.tw2018elem_singlepageBtn);\n }\n\n get isPageNumberVisible() {\n return this._isPageNumberVisible;\n }\n\n set isPageNumberVisible(val) {\n this._isPageNumberVisible = val;\n this._setDisplay(val, this.app.elements.tw2018elem_pageNumberDiv);\n this.app.elements.tw2018elem_sepTotalPages.style.display = val\n ? \"inline\"\n : \"none\";\n this.app.elements.tw2018elem_sepTotalPages.visible = val;\n this.app.elements.tw2018elem_totalPages.visible = val;\n this.app.elements.tw2018elem_totalPages.style.display = val\n ? \"inline\"\n : \"none\";\n }\n\n get isRotateClockwiseVisible() {\n return this._isRotateClockwiseVisible;\n }\n\n set isRotateClockwiseVisible(val) {\n this._isRotateClockwiseVisible = val;\n this._setDisplay(val, this.app.elements.tw2018elem_clockwiseBtn);\n }\n\n get isRotateCounterClockwiseVisible() {\n return this._isRotateCounterClockwiseVisible;\n }\n\n set isRotateCounterClockwiseVisible(val) {\n this._isRotateCounterClockwiseVisible = val;\n this._setDisplay(val, this.app.elements.tw2018elem_counterclockwiseBtn);\n }\n\n get isSearchVisible() {\n return this._isSearchVisible;\n }\n\n set isSearchVisible(val) {\n this._isSearchVisible = val;\n this._setDisplay(val, this.app.elements.tw2018elem_searchDiv);\n }\n\n get isDocumentInfoVisible() {\n return this._isDocumentInfoVisible;\n }\n\n set isDocumentInfoVisible(val) {\n this._isDocumentInfoVisible = val;\n this._setDisplay(val, this.app.elements.tw2018elem_documentinfoBtn);\n }\n\n get isBookmarksVisible() {\n return this._isBookmarksVisible;\n }\n\n set isBookmarksVisible(val) {\n this._isBookmarksVisible = val;\n this._setDisplay(val, this.app.elements.tw2018elem_bookmarkBtn);\n }\n // #endregion properties\n\n _toggleTooltip(show) {\n const elements =\n this.app.elements.tw2018elem_mainContainer.getElementsByClassName(\n \"tw2018css_tooltiptext\"\n );\n for (let i = 0; i < elements.length; i++) {\n elements[i].style.display = show ? \"inline\" : \"none\";\n }\n }\n\n _displayToolbarGroupSeparator(group) {\n let separator;\n let hiddenChildrenCount = 0;\n let isSeparatorHidden = false;\n for (let i = 0; i < group.children.length; i++) {\n const child = group.children[i];\n if (child.classList.contains(\"tw2018css_separator\")) {\n separator = child;\n }\n if (child.classList.contains(\"tw2018css_hidden\")) {\n if (separator === child) {\n isSeparatorHidden = true;\n }\n hiddenChildrenCount++;\n }\n }\n\n if (!separator) {\n return;\n }\n\n if (isSeparatorHidden) {\n if (hiddenChildrenCount < group.children.length) {\n separator.classList.remove(\"tw2018css_hidden\");\n }\n } else {\n if (hiddenChildrenCount === group.children.length - 1) {\n separator.classList.add(\"tw2018css_hidden\");\n }\n }\n }\n\n _setDisplay(show, elem) {\n elem.classList.toggle(\"tw2018css_hidden\", !show);\n this._displayToolbarGroupSeparator(elem.parentElement);\n }\n\n updateStatus(pageNumber) {\n tw_disableBtn(\n this.app.elements.tw2018elem_nextpageBtn,\n pageNumber === this.app.viewer.pdfDoc.numPages\n );\n tw_disableBtn(\n this.app.elements.tw2018elem_previouspageBtn,\n pageNumber === 1\n );\n }\n\n enableToolbar(enable) {\n const btnElements = [\n \"tw2018elem_multipageBtn\",\n \"tw2018elem_singlepageBtn\",\n \"tw2018elem_previouspageBtn\",\n \"tw2018elem_nextpageBtn\",\n \"tw2018elem_printBtn\",\n \"tw2018elem_downloadBtn\",\n \"tw2018elem_closeBtn\",\n \"tw2018elem_zoominBtn\",\n \"tw2018elem_zoomoutBtn\",\n \"tw2018elem_previousvisitedBtn\",\n \"tw2018elem_nextvisitedBtn\",\n \"tw2018elem_clockwiseBtn\",\n \"tw2018elem_counterclockwiseBtn\",\n \"tw2018elem_documentinfoBtn\",\n \"tw2018elem_bookmarkBtn\",\n \"tw2018elem_zoomDropDownArrow\",\n \"tw2018elem_zoomDropDown\",\n \"tw2018elem_zoomValuesDropDownClose\",\n \"tw2018elem_searchBtn\",\n \"tw2018elem_previousfindBtn\",\n \"tw2018elem_nextfindBtn\",\n \"tw2018elem_optionsBtn\",\n ];\n\n for (let i = 0; i < btnElements.length; i++) {\n const btnElement = this.app.elements[btnElements[i]];\n if (enable) {\n if (\n btnElement === this.app.elements.tw2018elem_zoominBtn &&\n this.app.viewer.currentZoomLevel ===\n this.app.zoomService.zoomLevels.length - 1\n ) {\n continue;\n }\n\n if (\n btnElement === this.app.elements.tw2018elem_zoomoutBtn &&\n this.app.viewer.currentZoomLevel === 0\n ) {\n continue;\n }\n\n if (\n btnElement === this.app.elements.tw2018elem_bookmarkBtn &&\n !this.app.bookmarkLayer.allBookmarks.length\n ) {\n continue;\n }\n } else {\n btnElement.classList.remove(\"tw2018css_focused\");\n }\n\n tw_disableBtn(btnElement, !enable);\n this.app.zoomService.hideZoomDropDown.bind(this.app.zoomService);\n }\n\n const divElements = [\n \"tw2018elem_pageNumberDiv\",\n \"tw2018elem_zoomDropDown\",\n \"tw2018elem_searchDiv\",\n ];\n for (let i = 0; i < divElements.length; i++) {\n const divElement = this.app.elements[divElements[i]];\n divElement.classList.toggle(\"tw2018css_disabled\", !enable);\n }\n\n const inputElements = [\n \"tw2018elem_zoomDropDownValue\",\n \"tw2018elem_pageNumber\",\n \"tw2018elem_searchTerm\",\n ];\n for (let i = 0; i < inputElements.length; i++) {\n this.app.elements[inputElements[i]].disabled = !enable;\n }\n\n if (enable) {\n this.app.elements.tw2018elem_singlepageBtn.classList.toggle(\n \"tw2018css_focused\",\n this.app.viewer.type === ViewerType.SINGLE_VIEW\n );\n this.app.elements.tw2018elem_multipageBtn.classList.toggle(\n \"tw2018css_focused\",\n this.app.viewer.type !== ViewerType.SINGLE_VIEW\n );\n }\n }\n}\n\nexport { Toolbar };\n","/* eslint-disable prettier/prettier */\n/**\n * Find options\n */\nclass FindOptions {\n constructor(findBar) {\n this._caseSensitive = false;\n this._highlightAll = false;\n this._wholeWord = false;\n this.findBar = findBar;\n }\n\n /**\n * Is search case sensitive?\n */\n get caseSensitive() {\n return this._caseSensitive;\n }\n\n set caseSensitive(val) {\n if (this._caseSensitive === val) {\n return;\n }\n\n this._caseSensitive = val;\n this.findBar.caseSensitive.checked = val;\n }\n\n /**\n * Should I highlight all matches?\n */\n get highlightAll() {\n return this._highlightAll;\n }\n\n set highlightAll(val) {\n if (this._highlightAll === val) {\n return;\n }\n\n this._highlightAll = val;\n this.findBar.highlightAll.checked = val;\n }\n\n /**\n * Should I search for whole word only?\n */\n get wholeWord() {\n return this._wholeWord;\n }\n\n set wholeWord(val) {\n if (this._wholeWord === val) {\n return;\n }\n\n this._wholeWord = val;\n this.findBar.wholeWord.checked = val;\n }\n}\n\nexport { FindOptions };\n","/* eslint-disable prettier/prettier */\n\"use strict\";\n\nimport { FindStatus } from \"./pdf_find_controller.js\";\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 * @ignore\n */\nclass PDFFindBar {\n constructor(options) {\n this.bar = options.bar || null;\n this.findField = options.findField || null;\n this.highlightAll = options.highlightAllCheckbox || null;\n this.wholeWord = options.wholeWord || null;\n this.caseSensitive = options.caseSensitiveCheckbox || null;\n this.findMsg = options.findMsg || null;\n this.findResultsCount = options.findResultsCount || null;\n this.findPreviousButton = options.findPreviousButton || null;\n this.findNextButton = options.findNextButton || null;\n this.searchButton = options.searchButton || null;\n this.searchResult = options.searchResult || null;\n this.findResultCurrent = options.findResultCurrent || null;\n this._app = options.app || null;\n\n // Add event listeners to the DOM elements.\n const self = this;\n\n this.bar.addEventListener(\"keydown\", function (event) {\n switch (event.keyCode) {\n case 13: // Enter\n if (event.target === self.findField) {\n self.dispatchEvent(\"again\", event.shiftKey);\n }\n break;\n case 27: // Escape\n self.reset();\n }\n });\n\n this.findField.addEventListener(\"input\", function () {\n self.searchButton.classList.toggle(\n \"tw2018css_cancel\",\n self.findField.value\n );\n\n if (!self.findField.value) {\n self.reset();\n }\n\n self.dispatchEvent(\"\");\n });\n\n this.searchButton.addEventListener(\"click\", function () {\n if (this.classList.contains(\"tw2018css_cancel\")) {\n self.reset();\n }\n });\n\n this.findPreviousButton.addEventListener(\"click\", function (event) {\n if (event.defaultPrevented) {\n return;\n }\n\n self.dispatchEvent(\"again\", true);\n });\n\n this.findNextButton.addEventListener(\"click\", function (event) {\n if (event.defaultPrevented) {\n return;\n }\n\n self.dispatchEvent(\"again\", false);\n });\n\n this.highlightAll.addEventListener(\"click\", function () {\n self.dispatchEvent(\"highlightallchange\");\n });\n\n this.wholeWord.addEventListener(\"click\", function () {\n self.dispatchEvent(\"wholewordchange\");\n });\n\n this.caseSensitive.addEventListener(\"click\", function () {\n self.dispatchEvent(\"casesensitivitychange\");\n });\n }\n\n dispatchEvent(type, findPrev) {\n const event = document.createEvent(\"CustomEvent\");\n event.initCustomEvent(\"find\" + type, true, true, {\n query: this.findField.value,\n caseSensitive: this.caseSensitive.checked,\n highlightAll: this.highlightAll.checked,\n findPrevious: findPrev,\n wholeWord: this.wholeWord.checked,\n });\n return this.bar.dispatchEvent(event);\n }\n\n updateUIState(findStatus, previous, matchCount, currentMatch) {\n let findMsgText = \"\";\n let findStatusText = \"\";\n\n switch (findStatus) {\n case FindStatus.FIND_FOUND:\n break;\n\n case FindStatus.FIND_PENDING:\n findStatusText = \"pending\";\n break;\n\n case FindStatus.FIND_NOTFOUND:\n findMsgText = this._app.texts.text_not_found;\n break;\n\n case FindStatus.FIND_WRAPPED:\n findMsgText = previous\n ? this._app.texts.find_reached_top\n : this._app.texts.find_reached_bottom;\n break;\n }\n\n this.findField.setAttribute(\"data-status\", findStatusText);\n if (findMsgText) {\n const coords = this._app.toolbar.getSearchOptionsCoordinate();\n this.findMsg.parentElement.style.top = coords.y + 5 + \"px\";\n }\n\n this.findMsg.parentElement.style.display = findMsgText ? \"block\" : \"none\";\n this.findMsg.textContent = findMsgText;\n\n this.updateResultsCount(currentMatch, matchCount);\n }\n\n updateResultsCount(currentMatch, matchCount) {\n if (!this.findResultsCount) {\n return; // no UI control is provided\n }\n\n if (matchCount === undefined) {\n this.findField.value = \"\";\n this.searchButton.classList.remove(\"tw2018css_cancel\");\n this.searchResult.classList.add(\"tw2018css_hidden\");\n this.findResultsCount.textContent = \"\";\n this.findResultCurrent.textContent = \"\";\n return;\n }\n\n // Create the match counter\n this.findResultsCount.textContent = matchCount.toLocaleString();\n this.findResultCurrent.textContent = currentMatch.toLocaleString() + \" /\";\n if (this.searchResult.getBoundingClientRect().width > 50) {\n this.findResultsCount.textContent = \"\";\n this.findResultCurrent.textContent = \"\";\n } else {\n if (matchCount > 0) {\n this.searchResult.classList.remove(\"tw2018css_hidden\");\n }\n }\n }\n\n reset() {\n this.findField.value = \"\";\n this.dispatchEvent(\"\");\n this.updateUIState();\n }\n}\n\nexport { PDFFindBar };\n","/* eslint-disable prettier/prettier */\n/* eslint-disable max-len */\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// eslint-disable-next-line no-redeclare\n/* globals PDFJS, FirefoxCom, Promise, scrollIntoView */\n\n\"use strict\";\n\nimport { getCharacterType } from \"./pdf_find_utils.js\";\n\nconst FindStatus = {\n FIND_FOUND: 0,\n FIND_NOTFOUND: 1,\n FIND_WRAPPED: 2,\n FIND_PENDING: 3,\n};\n\nconst FIND_SCROLL_OFFSET_TOP = -50;\nconst FIND_SCROLL_OFFSET_LEFT = -400;\n\n/**\n * Scrolls specified element into view of its parent.\n * @param {Object} element - The element to be visible.\n * @param {Object} spot - An object with optional top and left properties,\n * specifying the offset from the top left edge.\n * @param {boolean} skipOverflowHiddenElements - Ignore elements that have\n * the CSS rule `overflow: hidden;` set. The default is false.\n * @ignore\n */\nfunction tw2018func_scrollIntoView(element, spot, skipOverflowHiddenElements) {\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 animationStartedClosure.\n let parent = element.parentElement;\n if (!parent) {\n console.error(\"offsetParent is not set -- cannot scroll\");\n return;\n }\n\n const checkOverflow = skipOverflowHiddenElements || false;\n let offsetY = element.offsetTop + element.clientTop;\n let offsetX = element.offsetLeft + element.clientLeft;\n\n while (\n (parent.clientHeight === parent.scrollHeight &&\n parent.clientWidth === parent.scrollWidth) ||\n (checkOverflow && 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\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 * Provides \"search\" or \"find\" functionality for the PDF.\n * This object actually performs the search for a given string.\n * @ignore\n */\nclass PDFFindController {\n constructor(options) {\n this.startedTextExtraction = false;\n this.extractTextPromises = [];\n this.pendingPages = {};\n this.active = true; // If active, find results will be highlighted.\n this.pageContents = []; // Stores the text for each page.\n this.pageMatches = [];\n this.currentMatch = 0;\n this.matchCount = 0;\n this.selected = {\n // Currently selected match.\n pageIdx: -1,\n matchIdx: -1,\n };\n this.offset = {\n // Where the find algorithm currently is in the document.\n pageIdx: null,\n matchIdx: null,\n };\n this.pagesToSearch = null;\n this.resumePageIdx = null;\n this.state = {\n query: \"\",\n };\n this.dirtyMatch = false;\n this.findTimeout = null;\n this._app = options.app;\n this.integratedFind = options.integratedFind || false;\n this.charactersToNormalize = {\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 this.findBar = options.findBar || null;\n\n // Compile the regular expression for text normalization once\n const replace = Object.keys(this.charactersToNormalize).join(\"\");\n this.normalizationRegex = new RegExp(\"[\" + replace + \"]\", \"g\");\n\n this.firstPagePromise = new Promise(function (resolve) {\n resolve();\n });\n this.handleEvent = this.handleEvent.bind(this);\n\n this._events = [\n \"find\",\n \"findagain\",\n \"findhighlightallchange\",\n \"findcasesensitivitychange\",\n \"findwholewordchange\",\n ];\n }\n\n setFindBar(findBar) {\n this.findBar = findBar;\n for (let i = 0, len = this._events.length; i < len; i++) {\n this.findBar.bar.addEventListener(this._events[i], this.handleEvent);\n }\n }\n\n dispose() {\n for (let i = 0, len = this._events.length; i < len; i++) {\n this.findBar.bar.removeEventListener(this._events[i], this.handleEvent);\n }\n this.reset();\n }\n\n reset() {\n this.startedTextExtraction = false;\n this.extractTextPromises = [];\n clearTimeout(this.findTimeout);\n // this.active = false;\n }\n\n normalize(text) {\n const me = this;\n return text.replace(this.normalizationRegex, function (ch) {\n return me.charactersToNormalize[ch];\n });\n }\n\n calculateMatch(pageIndex) {\n let pageContent = this.normalize(this.pageContents[pageIndex]);\n let query = this.normalize(this.state.query);\n const queryLen = query.length;\n\n if (queryLen === 0) {\n // Do nothing: the matches should be wiped out already.\n return;\n }\n\n if (!this.state.caseSensitive) {\n pageContent = pageContent.toLowerCase();\n query = query.toLowerCase();\n }\n\n const matches = [];\n let matchIdx = -queryLen;\n\n // this is _calculatePhraseMatch. PdfJs viewer has also\n // implemented _calculateWordMatch which is more complex\n while (true) {\n matchIdx = pageContent.indexOf(query, matchIdx + queryLen);\n if (matchIdx === -1) {\n break;\n }\n if (\n this.state.wholeWord &&\n !this._isEntireWord(pageContent, matchIdx, queryLen)\n ) {\n continue;\n }\n matches.push(matchIdx);\n }\n\n this.pageMatches[pageIndex] = matches;\n this.updatePage(pageIndex);\n if (this.resumePageIdx === pageIndex) {\n this.resumePageIdx = null;\n this.nextPageMatch();\n }\n\n // Update the matches count\n if (matches.length > 0) {\n this.matchCount += matches.length;\n this.updateUIResultsCount();\n }\n }\n\n /**\n * Determine if the search query constitutes a \"whole word\", by comparing the\n * first/last character type with the preceding/following character type.\n */\n _isEntireWord(content, startIdx, length) {\n if (startIdx > 0) {\n const first = content.charCodeAt(startIdx);\n const limit = content.charCodeAt(startIdx - 1);\n if (getCharacterType(first) === getCharacterType(limit)) {\n return false;\n }\n }\n const endIdx = startIdx + length - 1;\n if (endIdx < content.length - 1) {\n const last = content.charCodeAt(endIdx);\n const limit = content.charCodeAt(endIdx + 1);\n if (getCharacterType(last) === getCharacterType(limit)) {\n return false;\n }\n }\n return true;\n }\n\n extractText() {\n if (this.startedTextExtraction) {\n return;\n }\n\n this.startedTextExtraction = true;\n this.pageContents = [];\n\n const extractTextPromisesResolves = [];\n const numPages = this._app.viewer.pdfDoc.numPages;\n for (let i = 0; i < numPages; i++) {\n this.extractTextPromises.push(\n new Promise(function (resolve) {\n extractTextPromisesResolves.push(resolve);\n })\n );\n }\n\n const me = this;\n\n function extractPageText(pageIndex) {\n me._app.viewer\n .getPageTextContent(pageIndex)\n .then(function textContentResolved(textContent) {\n const textItems = textContent.items;\n const str = [];\n\n for (let i = 0, len = textItems.length; i < len; i++) {\n str.push(textItems[i].str);\n }\n\n // Store the pageContent as a string.\n me.pageContents.push(str.join(\"\"));\n if (!me._app.viewer.pdfDoc) {\n return;\n }\n extractTextPromisesResolves[pageIndex](pageIndex);\n if (pageIndex + 1 < me._app.viewer.pdfDoc.numPages) {\n extractPageText(pageIndex + 1);\n }\n });\n }\n\n extractPageText(0);\n }\n\n handleEvent(e) {\n if (e.detail === null || e.type !== \"findagain\") {\n this.dirtyMatch = true;\n }\n this.state = e.detail;\n this.updateUIState(FindStatus.FIND_PENDING);\n\n this.firstPagePromise.then(\n function () {\n // this will be executed only once per opened document\n this.extractText();\n\n clearTimeout(this.findTimeout);\n if (e.type === \"find\") {\n // Only trigger the find action after 500ms of silence.\n this.findTimeout = setTimeout(this.nextMatch.bind(this), 500);\n } else {\n this.nextMatch();\n }\n }.bind(this)\n );\n }\n\n updatePage(index) {\n if (this.selected.pageIdx === index) {\n // If the page is selected, scroll the page into view, which triggers\n // rendering the page, which adds the textLayer. Once the textLayer is\n // build, it will scroll onto the selected match.\n this._app.viewer.showPage(index + 1);\n }\n\n const page = this._app.viewer.getPageView(index);\n if (this._app.viewer.modeView === 2) {\n // single view\n if (page.singleTextLayer) {\n page.singleTextLayer.updateMatches();\n }\n } else {\n // multi view\n if (page.textLayer) {\n page.textLayer.updateMatches();\n }\n }\n }\n\n nextMatch() {\n const previous = this.state.findPrevious;\n const currentPageIndex = this._app.viewer.currentPageNumber - 1;\n if (!this._app.viewer.pdfDoc) {\n return;\n }\n\n const numPages = this._app.viewer.pdfDoc.numPages;\n\n this.active = true;\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.currentMatch = 0;\n this.offset.pageIdx = currentPageIndex;\n this.offset.matchIdx = null;\n this.hadMatch = false;\n this.resumePageIdx = null;\n this.pageMatches = [];\n this.matchCount = 0;\n const me = this;\n\n for (let i = 0; i < numPages; i++) {\n // Wipe out any previous highlighted matches.\n this.updatePage(i);\n\n // As soon as the text is extracted start finding the matches in pages which aren't already in the pending state\n if (!(i in this.pendingPages)) {\n this.pendingPages[i] = true; // it could be whatever value, it is only important that exists that element\n this.extractTextPromises[i].then(function (pageIdx) {\n delete me.pendingPages[pageIdx];\n me.calculateMatch(pageIdx);\n });\n }\n }\n }\n\n // If there's no query there's no point in searching.\n if (this.state.query === \"\") {\n this.updateUIState(FindStatus.FIND_FOUND);\n return;\n }\n\n // If we're waiting on a page, we return since we can't do anything else.\n if (this.resumePageIdx) {\n return;\n }\n\n 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 this.hadMatch = true;\n offset.matchIdx = previous ? offset.matchIdx - 1 : offset.matchIdx + 1;\n this.updateMatch(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 the matchIdx.\n this.hadMatch = true;\n offset.matchIdx = previous ? numMatches - 1 : 0;\n this.updateMatch(true);\n return true;\n }\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(false);\n // while matches were not found, searching for a page\n // with matches should nevertheless halt.\n return true;\n }\n }\n\n // Matches were not found (and searching is not done).\n return false;\n }\n\n /**\n * The method is called back from the text layer when match presentation\n * is updated.\n * @param {number} pageIndex - page index.\n * @param {number} index - match index.\n * @param {Array} elements - text layer div elements array.\n * @param {number} beginIdx - start index of the div array for the match.\n * @param {number} endIdx - end index of the div array for the match.\n */\n updateMatchPosition(pageIndex, index, elements, beginIdx, endIdx) {\n if (\n this.selected.matchIdx === index &&\n this.selected.pageIdx === pageIndex\n ) {\n const spot = {\n top: FIND_SCROLL_OFFSET_TOP,\n left: FIND_SCROLL_OFFSET_LEFT,\n };\n tw2018func_scrollIntoView(\n elements[beginIdx],\n spot,\n /* skipOverflowHiddenElements = */ true\n );\n }\n }\n\n nextPageMatch() {\n if (this.resumePageIdx !== null) {\n console.error(\"There can only be one pending page.\");\n }\n\n let matches = [];\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.extractTextPromises.length;\n offset.pageIdx = previous ? offset.pageIdx - 1 : offset.pageIdx + 1;\n offset.matchIdx = null;\n\n this.pagesToSearch--;\n\n if (offset.pageIdx >= numPages || offset.pageIdx < 0) {\n offset.pageIdx = previous ? numPages - 1 : 0;\n offset.wrapped = true;\n }\n }\n\n updateMatch(found) {\n let state = FindStatus.FIND_NOTFOUND;\n const wrapped = this.offset.wrapped;\n this.offset.wrapped = false;\n if (found) {\n const previousPage = this.selected.pageIdx;\n this.currentMatch = 0;\n for (let i = 0; i < this.offset.pageIdx; i++) {\n this.currentMatch += this.pageMatches[i].length;\n }\n\n this.selected.pageIdx = this.offset.pageIdx;\n this.currentMatch += this.offset.matchIdx + 1;\n this.selected.matchIdx = this.offset.matchIdx;\n state = wrapped ? FindStatus.FIND_WRAPPED : FindStatus.FIND_FOUND;\n // Update the currently selected page to wipe out any selected matches.\n if (previousPage !== -1 && previousPage !== this.selected.pageIdx) {\n this.updatePage(previousPage);\n }\n }\n\n this.updateUIState(state, this.state.findPrevious);\n if (this.selected.pageIdx !== -1) {\n this.updatePage(this.selected.pageIdx);\n }\n }\n\n updateUIResultsCount() {\n if (this.findBar === null) {\n throw new Error(\n \"PDFFindController is not initialized with a PDFFindBar instance.\"\n );\n }\n\n this.findBar.updateResultsCount(this.currentMatch, this.matchCount);\n }\n\n _shouldDirtyMatch(cmd, state) {\n // When the search query changes, regardless of the actual search command\n // used, always re-calculate matches to avoid errors (fixes bug 1030622).\n if (state.query !== this._state.query) {\n return true;\n }\n switch (cmd) {\n case \"findagain\":\n const pageNumber = this._selected.pageIdx + 1;\n const linkService = this._linkService;\n // Only treat a 'findagain' event as a new search operation when it's\n // *absolutely* certain that the currently selected match is no longer\n // visible, e.g. as a result of the user scrolling in the document.\n //\n // NOTE: If only a simple `this._linkService.page` check was used here,\n // there's a risk that consecutive 'findagain' operations could \"skip\"\n // over matches at the top/bottom of pages thus making them completely\n // inaccessible when there's multiple pages visible in the viewer.\n if (\n pageNumber >= 1 &&\n pageNumber <= linkService.pagesCount &&\n pageNumber !== linkService.page &&\n !linkService.isPageVisible(pageNumber)\n ) {\n return true;\n }\n return false;\n case \"findhighlightallchange\":\n return false;\n }\n return true;\n }\n\n updateUIState(findStatus, previous) {\n if (this.findBar === null) {\n throw new Error(\n \"PDFFindController is not initialized with a PDFFindBar instance.\"\n );\n }\n\n this.findBar.updateUIState(\n findStatus,\n previous,\n this.matchCount,\n this.currentMatch\n );\n }\n}\n\nexport { FindStatus, PDFFindController };\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\nexport { CharacterType, getCharacterType };\n","/* eslint-disable prettier/prettier */\n/**\n * TWPDFDocument - PDF document class\n */\nclass TWPdfDocument {\n constructor() {\n /**\n * @member {File} file - PDF file\n */\n this.documentFile = null;\n /**\n * @member {string} - PDF URL\n */\n this.documentUrl = \"\";\n /**\n * @member {string} - Document name\n */\n this.documentName = \"\";\n /**\n * @member {Array} - Array of pages\n */\n this.pages = [];\n this.pagesSizeInfo = {\n maxWidth: 0,\n totalHeight: 0,\n numberOfBiggestPage: 0,\n };\n }\n\n resetTextLayer() {\n for (let i = 0; i < this.pages.length; i++) {\n this.pages[i].textLayer = null;\n }\n }\n}\n\nexport { TWPdfDocument };\n","/* eslint-disable prettier/prettier */\nimport {\n MIN_X_OFFSET,\n MIN_Y_OFFSET,\n TW_DATA_TAG,\n tw_disableBtn,\n} from \"./util.js\";\nimport { ViewerType } from \"./base_viewer.js\";\n\n/**\n * Zoom service object\n */\nclass ZoomService {\n constructor(app, initialZoom, isZoomFitToPage) {\n this._app = app;\n this._app.viewer.isZoomFitToPage = isZoomFitToPage || false;\n this._initialZoomValue = initialZoom || 0;\n this.zoomDropDownOpened = false;\n this._bindEvents();\n\n /**\n * Available zoom levels for selected document and viewer dimensions.\n */\n this.zoomLevels = [];\n }\n\n /**\n * Returns current zoom scale value.\n */\n get currentScale() {\n return this._app.viewer.scale;\n }\n\n // #region private functions\n _bindEvents() {\n const me = this;\n this._app.elements.tw2018elem_zoomDropDownValue.addEventListener(\n \"keydown\",\n function (e) {\n switch (e.which || e.keyCode) {\n case 13: {\n let zoomValue = 0;\n try {\n zoomValue = parseFloat(\n me._app.elements.tw2018elem_zoomDropDownValue.value\n .replace(\"%\", \"\")\n .trim()\n );\n } catch (err) {}\n\n if (\n isNaN(zoomValue) ||\n zoomValue < 10 ||\n zoomValue > me.getMaxZoomValue()\n ) {\n me._app.elements.tw2018elem_zoomDropDownValue.value =\n me._app.viewer.validZoomValue;\n return;\n }\n me._app.viewer.isZoomFitToPage = false;\n me.setZoomValue(zoomValue);\n me.hideZoomDropDown();\n }\n }\n }\n );\n\n this._app.elements.tw2018elem_zoomValuesDropDownClose.addEventListener(\n \"click\",\n function () {\n me.hideZoomDropDown();\n }\n );\n\n this._app.elements.tw2018elem_zoomDropDownArrow.addEventListener(\n \"click\",\n function (event) {\n if (this.disabled) {\n event.preventDefault();\n return;\n }\n\n if (me.zoomDropDownOpened) {\n me.hideZoomDropDown();\n } else {\n me.showZoomDropDown();\n }\n event.preventDefault();\n }\n );\n\n me._app.elements.tw2018elem_zoominBtn.addEventListener(\n \"click\",\n function (event) {\n if (!event.defaultPrevented) {\n me.zoomIn();\n }\n }\n );\n\n me._app.elements.tw2018elem_zoomoutBtn.addEventListener(\n \"click\",\n function (event) {\n if (!event.defaultPrevented) {\n me.zoomOut();\n }\n }\n );\n }\n\n hideZoomDropDown() {\n this._app.elements.tw2018elem_zoomValuesDropDown.classList.remove(\n \"tw2018css_show\"\n );\n this._app.elements.tw2018elem_zoomDropDownArrow.setAttribute(\n \"aria-expanded\",\n \"false\"\n );\n this.zoomDropDownOpened = false;\n }\n\n showZoomDropDown() {\n this.refreshZoomLevelsIfNeeded();\n const rectToolbar =\n this._app.elements.tw2018elem_toolbar.getBoundingClientRect();\n const rect =\n this._app.elements.tw2018elem_zoomDropDownValue.getBoundingClientRect();\n // const y = rectToolbar.height;\n // const y = rect.bottom - 1;\n const y = rect.top - rectToolbar.top + rect.height + 8;\n const x = rect.left - rectToolbar.left - 1;\n // this._app.elements.tw2018elem_zoomValues.style.top = y + \"px\";\n // this._app.elements.tw2018elem_zoomValues.style.left = x + \"px\";\n this._app.elements.tw2018elem_zoomValues.classList.add(\"tw2018css_show\");\n this._app.elements.tw2018elem_zoomValuesDropDown.style.top = y + \"px\";\n this._app.elements.tw2018elem_zoomValuesDropDown.style.left = x + \"px\";\n this._app.elements.tw2018elem_zoomValuesDropDown.classList.add(\n \"tw2018css_show\"\n );\n this._app.elements.tw2018elem_zoomDropDownArrow.setAttribute(\n \"aria-expanded\",\n \"true\"\n );\n this.zoomDropDownOpened = true;\n }\n\n _updateToolbarZoomValue() {\n this._app.elements.tw2018elem_zoominBtn.disabled =\n this._app.viewer.currentZoomLevel === this.zoomLevels.length - 1;\n this._app.elements.tw2018elem_zoomoutBtn.disabled =\n this._app.viewer.currentZoomLevel === 0;\n\n this._selectToolbarZoomDropDownValue();\n }\n\n _getToolbarZoomLi(scale, text) {\n const li = document.createElement(\"li\");\n li.setAttribute(\"scale\", scale);\n const btn = document.createElement(\"button\");\n btn.innerText = text;\n li.appendChild(btn);\n // eslint-disable-next-line no-unsanitized/property\n if (scale === this._app.viewer.scale) {\n li.classList.add(\"tw2018css_selected\");\n li.setAttribute(TW_DATA_TAG, \"\");\n li.setAttribute(\"aria-selected\", \"true\");\n }\n\n const me = this;\n me._app.elements.tw2018elem_zoomValues.appendChild(li);\n btn.addEventListener(\"click\", function () {\n me._app.elements.tw2018elem_zoomDropDownValue.value = this.innerHTML;\n const scaleVal = this.parentElement.getAttribute(\"scale\");\n me._app.viewer.scale =\n scaleVal === \"fit\" ? me._app.viewer.fitToPage : parseFloat(scaleVal);\n me._app.viewer.isZoomFitToPage =\n me._app.viewer.scale === me._app.viewer.fitToPage;\n me._app.viewer.currentZoomLevel = me.zoomLevels.indexOf(\n me._app.viewer.scale\n );\n me.executeZoom();\n me.hideZoomDropDown();\n });\n return li;\n }\n\n _fillToolbarZoomDropDownValues() {\n const val = Math.round(this._app.viewer.scale * 100) + \"%\";\n this._app.elements.tw2018elem_zoomDropDownValue.value = val;\n this._app.viewer.validZoomValue = val;\n this._app.elements.tw2018elem_zoomValues.innerHTML = \"\";\n\n for (let i = 0; i < this.zoomLevels.length; i++) {\n this._app.elements.tw2018elem_zoomValues.appendChild(\n this._getToolbarZoomLi(\n this.zoomLevels[i],\n Math.round(this.zoomLevels[i] * 100) + \"%\"\n )\n );\n }\n\n const horizontalSeparator = document.createElement(\"hr\");\n horizontalSeparator.setAttribute(TW_DATA_TAG, \"\");\n horizontalSeparator.classList.add(\"tw2018css_horizontalSeparator\");\n this._app.elements.tw2018elem_zoomValues.appendChild(horizontalSeparator);\n\n this._app.elements.tw2018elem_zoomValues.appendChild(\n this._getToolbarZoomLi(1, this._app.texts.zoom_actual_size)\n );\n const fitSize = this._getToolbarZoomLi(\n \"fit\",\n this._app.texts.zoom_fit_to_page\n );\n if (this._app.viewer.isZoomFitToPage) {\n fitSize.classList.add(\"tw2018css_selected\");\n fitSize.setAttribute(TW_DATA_TAG, \"\");\n }\n this._app.elements.tw2018elem_zoomValues.appendChild(fitSize);\n }\n\n _getDisplayRatio() {\n return 96 / 72;\n }\n\n _selectToolbarZoomDropDownValue() {\n const val = Math.round(this._app.viewer.scale * 100) + \"%\";\n this._app.elements.tw2018elem_zoomDropDownValue.value = val;\n this._app.viewer.validZoomValue = val;\n for (\n let i = 0;\n i < this._app.elements.tw2018elem_zoomValues.childElementCount;\n i++\n ) {\n const elem = this._app.elements.tw2018elem_zoomValues.children[i];\n const scaleAttr = elem.getAttribute(\"scale\");\n if (\n (scaleAttr === \"fit\" && this._app.viewer.isZoomFitToPage) ||\n // eslint-disable-next-line eqeqeq\n scaleAttr == this._app.viewer.scale\n ) {\n elem.classList.add(\"tw2018css_selected\");\n } else {\n elem.classList.remove(\"tw2018css_selected\");\n }\n }\n }\n\n _checkIfVerticalScrollIsRequired(totalHeight, isHorizontalBarVisible) {\n const horizontalScrollBarHeight = isHorizontalBarVisible ? 20 : 0;\n return (\n totalHeight + horizontalScrollBarHeight > this._app.visibleAreaHeight\n );\n }\n\n _getFitToPageZoomLevel(totalHeight = -1) {\n const numberOfPageWithBiggestSize =\n this._app.pdfDocument.pagesSizeInfo.numberOfBiggestPage;\n const biggestPage =\n this._app.pdfDocument.pages[numberOfPageWithBiggestSize - 1];\n const isVerticalScrollRequired = this._checkIfVerticalScrollIsRequired(\n totalHeight,\n false\n ); // horizontalScrollRequired is false because we are searching FitToPage zoom so there will not be horizontalScroll\n const verticalScrollWidth = isVerticalScrollRequired ? 20 : 0;\n\n const controlHeight = this._app.visibleAreaHeight - MIN_Y_OFFSET * 2;\n const controlWidth =\n this._app.visibleAreaWidth - verticalScrollWidth - MIN_X_OFFSET * 2;\n\n const zoomFactorWidth = controlWidth / biggestPage.originalWidth;\n const zoomFactorHeight = controlHeight / biggestPage.originalHeight;\n\n return Math.min(zoomFactorWidth, zoomFactorHeight);\n }\n\n _setMaxZoomLevel() {\n const numberOfPageWithBiggestSize =\n this._app.pdfDocument.pagesSizeInfo.numberOfBiggestPage;\n const maxPageWidth =\n this._app.pdfDocument.pages[numberOfPageWithBiggestSize - 1]\n .originalWidth;\n const maxPageHeight =\n this._app.pdfDocument.pages[numberOfPageWithBiggestSize - 1]\n .originalHeight;\n\n const maxBitmapSizeInBytes = 100 * 1024 * 1024;\n\n const bytesPerPixel = 4; // 32 bit\n const displayRatio = this._getDisplayRatio();\n this._app.viewer.maxZoomLevel = Math.sqrt(\n maxBitmapSizeInBytes /\n bytesPerPixel /\n (maxPageWidth * displayRatio * maxPageHeight * displayRatio)\n );\n }\n // #endregion\n\n // #region internal functions\n useInitialZoomValueIfSet() {\n if (!this._initialZoomValue) {\n return false;\n }\n\n this.calculateZoom();\n this.setZoomValue(this._initialZoomValue);\n this._initialZoomValue = 0;\n return true;\n }\n\n mouseWheelHandler(e) {\n // cross-browser wheel data\n const delta = Math.max(-1, Math.min(1, e.wheelDelta || -e.detail));\n\n if (\n delta > 0 &&\n this._app.viewer.currentZoomLevel < this.zoomLevels.length - 1\n ) {\n // const oldValue = this.zoomLevels[this.viewer.currentZoomLevel];\n this._app.viewer.currentZoomLevel++;\n this.executeZoom();\n }\n\n if (delta < 0 && this._app.viewer.currentZoomLevel > 0) {\n // const oldValue = this.zoomLevels[this.viewer.currentZoomLevel];\n this._app.viewer.currentZoomLevel--;\n this.executeZoom();\n }\n }\n\n executeZoom(reloadDocument = true) {\n this._app.viewer.tempPageNumber = this._app.viewer.currentPageNumber;\n this._app.viewer.scale = this.zoomLevels[this._app.viewer.currentZoomLevel];\n this._app.viewer.isZoomFitToPage =\n this._app.viewer.scale === this._app.viewer.fitToPage;\n this._updateToolbarZoomValue();\n if (reloadDocument) {\n this._app.renderPdfDocInViewer();\n }\n }\n\n setZoomLevels(fitToPage, customZoom, maxZoomLevel) {\n this.zoomLevels = [];\n const customZoom1 = Math.min(fitToPage, customZoom);\n const customZoom2 = Math.max(fitToPage, customZoom);\n\n let customZoom1Added = false;\n let customZoom2Added = false;\n if (customZoom1 === customZoom2) {\n customZoom1Added = true;\n }\n\n maxZoomLevel = (parseInt((maxZoomLevel * 100) / 50) * 50) / 100; // round max value to nearest 50\n\n const defaultZoomLevels = [0.1, 0.25, 0.5, 0.75, 1, 1.25, 1.5, 2, 4, 8, 16];\n for (let i = 0; i < defaultZoomLevels.length; i++) {\n const zoomLevel = defaultZoomLevels[i];\n if (maxZoomLevel < zoomLevel) {\n break;\n }\n\n if (!customZoom1Added && customZoom1 < zoomLevel) {\n customZoom1Added = true;\n if (customZoom1 > 0 && !this.zoomLevels.includes(customZoom1)) {\n this.zoomLevels.push(customZoom1);\n }\n }\n\n if (!customZoom2Added && customZoom2 < zoomLevel) {\n customZoom2Added = true;\n if (customZoom2 > 0 && !this.zoomLevels.includes(customZoom2)) {\n this.zoomLevels.push(customZoom2);\n }\n }\n\n if (!this.zoomLevels.includes(zoomLevel)) {\n this.zoomLevels.push(zoomLevel);\n }\n }\n\n if (\n !customZoom1Added &&\n customZoom1 < maxZoomLevel &&\n customZoom1 > 0 &&\n !this.zoomLevels.includes(customZoom1)\n ) {\n this.zoomLevels.push(customZoom1);\n }\n\n if (\n !customZoom2Added &&\n customZoom2 < maxZoomLevel &&\n customZoom2 > 0 &&\n !this.zoomLevels.includes(customZoom2)\n ) {\n this.zoomLevels.push(customZoom2);\n }\n\n if (!this.zoomLevels.includes(maxZoomLevel)) {\n this.zoomLevels.push(maxZoomLevel);\n }\n }\n\n refreshZoomLevelsIfNeeded() {\n let refreshZoomLevels = false;\n const heightArea =\n this._app.viewer.type === ViewerType.MULTI_VIEW\n ? this._app.pdfDocument.pagesSizeInfo\n : this._app.pdfDocument.pagesSizeInfo.numberOfBiggestPage;\n const fitToPageTemp = this._getFitToPageZoomLevel(heightArea.totalHeight);\n if (this._app.viewer.fitToPage != fitToPageTemp) {\n refreshZoomLevels = true;\n }\n this._app.viewer.fitToPage = fitToPageTemp;\n if (this._app.viewer.isZoomFitToPage) {\n this._app.viewer.scale = this._app.viewer.fitToPage;\n refreshZoomLevels = true;\n }\n\n if (refreshZoomLevels) {\n this.setZoomLevels(\n this._app.viewer.fitToPage,\n this._app.viewer.scale,\n this._app.viewer.maxZoomLevel\n );\n this._fillToolbarZoomDropDownValues();\n this._app.viewer.currentZoomLevel = this.zoomLevels.indexOf(\n this._app.viewer.scale\n );\n }\n }\n\n fitToPageIfNeeded() {\n this.refreshZoomLevelsIfNeeded();\n if (this._app.viewer.isZoomFitToPage) {\n this.executeZoom();\n }\n }\n\n calculateZoom() {\n const heightArea =\n this._app.viewer.type === ViewerType.MULTI_VIEW\n ? this._app.pdfDocument.pagesSizeInfo\n : this._app.pdfDocument.pagesSizeInfo.numberOfBiggestPage;\n\n this._app.viewer.fitToPage = this._getFitToPageZoomLevel(\n heightArea.totalHeight\n );\n\n this.setZoomLevels(\n this._app.viewer.fitToPage,\n this._app.viewer.scale,\n this._app.viewer.maxZoomLevel\n );\n\n if (this._app.viewer.isZoomFitToPage) {\n this._app.viewer.scale = this._app.viewer.fitToPage;\n this._app.viewer.currentZoomLevel = this.zoomLevels.indexOf(\n this._app.viewer.fitToPage\n );\n }\n\n this._setMaxZoomLevel();\n this.setZoomLevels(\n this._app.viewer.fitToPage,\n this._app.viewer.scale,\n this._app.viewer.maxZoomLevel\n );\n this._fillToolbarZoomDropDownValues();\n }\n // #endregion\n\n // #region public functions\n /** Magnify displayed content size. */\n zoomIn() {\n if (this._app.viewer.currentZoomLevel === this.zoomLevels.length - 1) {\n return;\n }\n // const oldValue = this.zoomLevels[this.viewer.currentZoomLevel];\n this._app.viewer.currentZoomLevel++;\n tw_disableBtn(\n this._app.elements.tw2018elem_zoominBtn,\n this._app.viewer.currentZoomLevel > this.zoomLevels.length - 2\n );\n this.executeZoom();\n }\n\n //* Reduce displayed content size. */\n zoomOut() {\n if (this._app.viewer.currentZoomLevel === 0) {\n return;\n }\n // const oldValue = this.zoomLevels[this.viewer.currentZoomLevel];\n this._app.viewer.currentZoomLevel--;\n tw_disableBtn(\n this._app.elements.tw2018elem_zoomoutBtn,\n this._app.viewer.currentZoomLevel < 1\n );\n this.executeZoom();\n }\n\n /** Sets and applies *zoomValue*.\n * @param {number} zoomValue - Zoom value to set.\n */\n setZoomValue(zoomValue) {\n this._app.viewer.scale = zoomValue / 100;\n if (this._app.viewer.isZoomFitToPage) {\n this._app.viewer.scale = this._app.viewer.fitToPage;\n }\n this._app.viewer.currentZoomLevel = this.zoomLevels.indexOf(\n this._app.viewer.scale\n );\n if (this._app.viewer.currentZoomLevel === -1) {\n this.setZoomLevels(\n this._app.viewer.fitToPage,\n this._app.viewer.scale,\n this._app.viewer.maxZoomLevel\n );\n this._app.viewer.currentZoomLevel = this.zoomLevels.indexOf(\n this._app.viewer.scale\n );\n this._fillToolbarZoomDropDownValues();\n }\n this.executeZoom();\n }\n\n /** Returns max zoom value for loaded document and\n * current viewer dimension size. */\n getMaxZoomValue() {\n return this.zoomLevels[this.zoomLevels.length - 1] * 100;\n }\n // #endregion\n}\n\nexport { ZoomService };\n"],"sourceRoot":""}