1616/** @typedef {import("./event_utils").EventBus } EventBus */
1717/** @typedef {import("./interfaces").IPDFLinkService } IPDFLinkService */
1818
19+ import { PagesMapper , parseQueryString } from "./ui_utils.js" ;
1920import { isValidExplicitDest } from "pdfjs-lib" ;
20- import { parseQueryString } from "./ui_utils.js" ;
2121
2222const DEFAULT_LINK_REL = "noopener noreferrer nofollow" ;
2323
@@ -50,6 +50,8 @@ const LinkTarget = {
5050class PDFLinkService {
5151 externalLinkEnabled = true ;
5252
53+ #pagesMapper = PagesMapper . instance ;
54+
5355 /**
5456 * @param {PDFLinkServiceOptions } options
5557 */
@@ -138,7 +140,7 @@ class PDFLinkService {
138140 if ( ! this . pdfDocument ) {
139141 return ;
140142 }
141- let namedDest , explicitDest , pageNumber ;
143+ let namedDest , explicitDest , pageId ;
142144 if ( typeof dest === "string" ) {
143145 namedDest = dest ;
144146 explicitDest = await this . pdfDocument . getDestination ( dest ) ;
@@ -156,13 +158,13 @@ class PDFLinkService {
156158 const [ destRef ] = explicitDest ;
157159
158160 if ( destRef && typeof destRef === "object" ) {
159- pageNumber = this . pdfDocument . cachedPageNumber ( destRef ) ;
161+ pageId = this . pdfDocument . cachedPageNumber ( destRef ) ;
160162
161- if ( ! pageNumber ) {
163+ if ( ! pageId ) {
162164 // Fetch the page reference if it's not yet available. This could
163165 // only occur during loading, before all pages have been resolved.
164166 try {
165- pageNumber = ( await this . pdfDocument . getPageIndex ( destRef ) ) + 1 ;
167+ pageId = ( await this . pdfDocument . getPageIndex ( destRef ) ) + 1 ;
166168 } catch {
167169 console . error (
168170 `goToDestination: "${ destRef } " is not a valid page reference, for dest="${ dest } ".`
@@ -171,20 +173,25 @@ class PDFLinkService {
171173 }
172174 }
173175 } else if ( Number . isInteger ( destRef ) ) {
174- pageNumber = destRef + 1 ;
176+ pageId = destRef + 1 ;
175177 }
176- if ( ! pageNumber || pageNumber < 1 || pageNumber > this . pagesCount ) {
178+ if ( ! pageId || pageId < 1 || pageId > this . pagesCount ) {
177179 console . error (
178- `goToDestination: "${ pageNumber } " is not a valid page number, for dest="${ dest } ".`
180+ `goToDestination: "${ pageId } " is not a valid page number, for dest="${ dest } ".`
179181 ) ;
180182 return ;
181183 }
182184
185+ const pageNumber = this . #pagesMapper. getPageNumber ( pageId ) ;
186+ if ( pageNumber === null ) {
187+ return ;
188+ }
189+
183190 if ( this . pdfHistory ) {
184191 // Update the browser history before scrolling the new destination into
185192 // view, to be able to accurately capture the current document position.
186193 this . pdfHistory . pushCurrentPosition ( ) ;
187- this . pdfHistory . push ( { namedDest, explicitDest, pageNumber } ) ;
194+ this . pdfHistory . push ( { namedDest, explicitDest, pageNumber : pageId } ) ;
188195 }
189196
190197 this . pdfViewer . scrollPageIntoView ( {
@@ -197,7 +204,7 @@ class PDFLinkService {
197204 this . eventBus . _on (
198205 "textlayerrendered" ,
199206 evt => {
200- if ( evt . pageNumber === pageNumber ) {
207+ if ( evt . pageNumber === pageId ) {
201208 evt . source . textLayer . div . focus ( ) ;
202209 ac . abort ( ) ;
203210 }
0 commit comments