|
|
@ -21,7 +21,7 @@ |
|
|
|
PasswordPrompt, PresentationMode, HandTool, Promise, |
|
|
|
PasswordPrompt, PresentationMode, HandTool, Promise, |
|
|
|
DocumentProperties, DocumentOutlineView, DocumentAttachmentsView, |
|
|
|
DocumentProperties, DocumentOutlineView, DocumentAttachmentsView, |
|
|
|
OverlayManager, PDFFindController, PDFFindBar, getVisibleElements, |
|
|
|
OverlayManager, PDFFindController, PDFFindBar, getVisibleElements, |
|
|
|
watchScroll */ |
|
|
|
watchScroll, PDFViewer */ |
|
|
|
|
|
|
|
|
|
|
|
'use strict'; |
|
|
|
'use strict'; |
|
|
|
|
|
|
|
|
|
|
@ -92,9 +92,6 @@ var mozL10n = document.mozL10n || document.webL10n; |
|
|
|
//#include chromecom.js
|
|
|
|
//#include chromecom.js
|
|
|
|
//#endif
|
|
|
|
//#endif
|
|
|
|
|
|
|
|
|
|
|
|
var cache = new Cache(DEFAULT_CACHE_SIZE); |
|
|
|
|
|
|
|
var currentPageNumber = 1; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//#include view_history.js
|
|
|
|
//#include view_history.js
|
|
|
|
//#include pdf_find_bar.js
|
|
|
|
//#include pdf_find_bar.js
|
|
|
|
//#include pdf_find_controller.js
|
|
|
|
//#include pdf_find_controller.js
|
|
|
@ -107,33 +104,32 @@ var currentPageNumber = 1; |
|
|
|
//#include document_properties.js
|
|
|
|
//#include document_properties.js
|
|
|
|
|
|
|
|
|
|
|
|
var PDFView = { |
|
|
|
var PDFView = { |
|
|
|
pages: [], |
|
|
|
|
|
|
|
currentScale: UNKNOWN_SCALE, |
|
|
|
|
|
|
|
currentScaleValue: null, |
|
|
|
|
|
|
|
initialBookmark: document.location.hash.substring(1), |
|
|
|
initialBookmark: document.location.hash.substring(1), |
|
|
|
container: null, |
|
|
|
|
|
|
|
initialized: false, |
|
|
|
initialized: false, |
|
|
|
fellback: false, |
|
|
|
fellback: false, |
|
|
|
pdfDocument: null, |
|
|
|
pdfDocument: null, |
|
|
|
sidebarOpen: false, |
|
|
|
sidebarOpen: false, |
|
|
|
printing: false, |
|
|
|
printing: false, |
|
|
|
pageViewScroll: null, |
|
|
|
pdfViewer: null, |
|
|
|
pdfThumbnailViewer: null, |
|
|
|
pdfThumbnailViewer: null, |
|
|
|
pageRotation: 0, |
|
|
|
pageRotation: 0, |
|
|
|
mouseScrollTimeStamp: 0, |
|
|
|
mouseScrollTimeStamp: 0, |
|
|
|
mouseScrollDelta: 0, |
|
|
|
mouseScrollDelta: 0, |
|
|
|
lastScroll: 0, |
|
|
|
lastScroll: 0, |
|
|
|
previousPageNumber: 1, |
|
|
|
|
|
|
|
isViewerEmbedded: (window.parent !== window), |
|
|
|
isViewerEmbedded: (window.parent !== window), |
|
|
|
idleTimeout: null, |
|
|
|
idleTimeout: null, |
|
|
|
currentPosition: null, |
|
|
|
|
|
|
|
url: '', |
|
|
|
url: '', |
|
|
|
|
|
|
|
|
|
|
|
// called once when the document is loaded
|
|
|
|
// called once when the document is loaded
|
|
|
|
initialize: function pdfViewInitialize() { |
|
|
|
initialize: function pdfViewInitialize() { |
|
|
|
var self = this; |
|
|
|
var container = document.getElementById('viewerContainer'); |
|
|
|
var container = this.container = document.getElementById('viewerContainer'); |
|
|
|
var viewer = document.getElementById('viewer'); |
|
|
|
this.pageViewScroll = watchScroll(container, updateViewarea); |
|
|
|
this.pdfViewer = new PDFViewer({ |
|
|
|
|
|
|
|
container: container, |
|
|
|
|
|
|
|
viewer: viewer, |
|
|
|
|
|
|
|
renderingQueue: this, |
|
|
|
|
|
|
|
linkService: this |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
var thumbnailContainer = document.getElementById('thumbnailView'); |
|
|
|
var thumbnailContainer = document.getElementById('thumbnailView'); |
|
|
|
this.pdfThumbnailViewer = new PDFThumbnailViewer({ |
|
|
|
this.pdfThumbnailViewer = new PDFThumbnailViewer({ |
|
|
@ -271,133 +267,44 @@ var PDFView = { |
|
|
|
return this.pdfDocument.getPage(n); |
|
|
|
return this.pdfDocument.getPage(n); |
|
|
|
}, |
|
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
_setScaleUpdatePages: function pdfView_setScaleUpdatePages( |
|
|
|
getPageView: function pdfViewGetPageView(index) { |
|
|
|
newScale, newValue, resetAutoSettings, noScroll) { |
|
|
|
return this.pdfViewer.pages[index]; |
|
|
|
this.currentScaleValue = newValue; |
|
|
|
|
|
|
|
if (newScale === this.currentScale) { |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
for (var i = 0, ii = this.pages.length; i < ii; i++) { |
|
|
|
|
|
|
|
this.pages[i].update(newScale); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
this.currentScale = newScale; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!noScroll) { |
|
|
|
|
|
|
|
var page = this.page, dest; |
|
|
|
|
|
|
|
if (this.currentPosition && !IGNORE_CURRENT_POSITION_ON_ZOOM) { |
|
|
|
|
|
|
|
page = this.currentPosition.page; |
|
|
|
|
|
|
|
dest = [null, { name: 'XYZ' }, this.currentPosition.left, |
|
|
|
|
|
|
|
this.currentPosition.top, null]; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
this.pages[page - 1].scrollIntoView(dest); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
var event = document.createEvent('UIEvents'); |
|
|
|
|
|
|
|
event.initUIEvent('scalechange', false, false, window, 0); |
|
|
|
|
|
|
|
event.scale = newScale; |
|
|
|
|
|
|
|
event.resetAutoSettings = resetAutoSettings; |
|
|
|
|
|
|
|
window.dispatchEvent(event); |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
setScale: function pdfViewSetScale(value, resetAutoSettings, noScroll) { |
|
|
|
|
|
|
|
if (value === 'custom') { |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
var scale = parseFloat(value); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (scale > 0) { |
|
|
|
|
|
|
|
this._setScaleUpdatePages(scale, value, true, noScroll); |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
var currentPage = this.pages[this.page - 1]; |
|
|
|
|
|
|
|
if (!currentPage) { |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
var hPadding = PresentationMode.active ? 0 : SCROLLBAR_PADDING; |
|
|
|
|
|
|
|
var vPadding = PresentationMode.active ? 0 : VERTICAL_PADDING; |
|
|
|
|
|
|
|
var pageWidthScale = (this.container.clientWidth - hPadding) / |
|
|
|
|
|
|
|
currentPage.width * currentPage.scale; |
|
|
|
|
|
|
|
var pageHeightScale = (this.container.clientHeight - vPadding) / |
|
|
|
|
|
|
|
currentPage.height * currentPage.scale; |
|
|
|
|
|
|
|
switch (value) { |
|
|
|
|
|
|
|
case 'page-actual': |
|
|
|
|
|
|
|
scale = 1; |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case 'page-width': |
|
|
|
|
|
|
|
scale = pageWidthScale; |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case 'page-height': |
|
|
|
|
|
|
|
scale = pageHeightScale; |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case 'page-fit': |
|
|
|
|
|
|
|
scale = Math.min(pageWidthScale, pageHeightScale); |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case 'auto': |
|
|
|
|
|
|
|
var isLandscape = (currentPage.width > currentPage.height); |
|
|
|
|
|
|
|
var horizontalScale = isLandscape ? pageHeightScale : pageWidthScale; |
|
|
|
|
|
|
|
scale = Math.min(MAX_AUTO_SCALE, horizontalScale); |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
default: |
|
|
|
|
|
|
|
console.error('pdfViewSetScale: \'' + value + |
|
|
|
|
|
|
|
'\' is an unknown zoom value.'); |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
this._setScaleUpdatePages(scale, value, resetAutoSettings, noScroll); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
selectScaleOption(value); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}, |
|
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
zoomIn: function pdfViewZoomIn(ticks) { |
|
|
|
zoomIn: function pdfViewZoomIn(ticks) { |
|
|
|
var newScale = this.currentScale; |
|
|
|
var newScale = this.pdfViewer.currentScale; |
|
|
|
do { |
|
|
|
do { |
|
|
|
newScale = (newScale * DEFAULT_SCALE_DELTA).toFixed(2); |
|
|
|
newScale = (newScale * DEFAULT_SCALE_DELTA).toFixed(2); |
|
|
|
newScale = Math.ceil(newScale * 10) / 10; |
|
|
|
newScale = Math.ceil(newScale * 10) / 10; |
|
|
|
newScale = Math.min(MAX_SCALE, newScale); |
|
|
|
newScale = Math.min(MAX_SCALE, newScale); |
|
|
|
} while (--ticks && newScale < MAX_SCALE); |
|
|
|
} while (--ticks && newScale < MAX_SCALE); |
|
|
|
this.setScale(newScale, true); |
|
|
|
this.pdfViewer.setScale(newScale, true); |
|
|
|
}, |
|
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
zoomOut: function pdfViewZoomOut(ticks) { |
|
|
|
zoomOut: function pdfViewZoomOut(ticks) { |
|
|
|
var newScale = this.currentScale; |
|
|
|
var newScale = this.pdfViewer.currentScale; |
|
|
|
do { |
|
|
|
do { |
|
|
|
newScale = (newScale / DEFAULT_SCALE_DELTA).toFixed(2); |
|
|
|
newScale = (newScale / DEFAULT_SCALE_DELTA).toFixed(2); |
|
|
|
newScale = Math.floor(newScale * 10) / 10; |
|
|
|
newScale = Math.floor(newScale * 10) / 10; |
|
|
|
newScale = Math.max(MIN_SCALE, newScale); |
|
|
|
newScale = Math.max(MIN_SCALE, newScale); |
|
|
|
} while (--ticks && newScale > MIN_SCALE); |
|
|
|
} while (--ticks && newScale > MIN_SCALE); |
|
|
|
this.setScale(newScale, true); |
|
|
|
this.pdfViewer.setScale(newScale, true); |
|
|
|
}, |
|
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
set page(val) { |
|
|
|
get currentScaleValue() { |
|
|
|
var pages = this.pages; |
|
|
|
return this.pdfViewer.currentScaleValue; |
|
|
|
var event = document.createEvent('UIEvents'); |
|
|
|
}, |
|
|
|
event.initUIEvent('pagechange', false, false, window, 0); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!(0 < val && val <= pages.length)) { |
|
|
|
|
|
|
|
this.previousPageNumber = val; |
|
|
|
|
|
|
|
event.pageNumber = this.page; |
|
|
|
|
|
|
|
window.dispatchEvent(event); |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
pages[val - 1].updateStats(); |
|
|
|
get pagesCount() { |
|
|
|
this.previousPageNumber = currentPageNumber; |
|
|
|
return this.pdfDocument.numPages; |
|
|
|
currentPageNumber = val; |
|
|
|
}, |
|
|
|
event.pageNumber = val; |
|
|
|
|
|
|
|
window.dispatchEvent(event); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// checking if the this.page was called from the updateViewarea function:
|
|
|
|
set page(val) { |
|
|
|
// avoiding the creation of two "set page" method (internal and public)
|
|
|
|
this.pdfViewer.setCurrentPageNumber(val); |
|
|
|
if (updateViewarea.inProgress) { |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
// Avoid scrolling the first page during loading
|
|
|
|
|
|
|
|
if (this.loading && val === 1) { |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
pages[val - 1].scrollIntoView(); |
|
|
|
|
|
|
|
}, |
|
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
get page() { |
|
|
|
get page() { |
|
|
|
return currentPageNumber; |
|
|
|
return this.pdfViewer.currentPageNumber; |
|
|
|
}, |
|
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
get supportsPrinting() { |
|
|
|
get supportsPrinting() { |
|
|
@ -478,11 +385,6 @@ var PDFView = { |
|
|
|
return bar; |
|
|
|
return bar; |
|
|
|
}, |
|
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
get isHorizontalScrollbarEnabled() { |
|
|
|
|
|
|
|
return (PresentationMode.active ? false : |
|
|
|
|
|
|
|
(this.container.scrollWidth > this.container.clientWidth)); |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//#if (FIREFOX || MOZCENTRAL)
|
|
|
|
//#if (FIREFOX || MOZCENTRAL)
|
|
|
|
initPassiveLoading: function pdfViewInitPassiveLoading() { |
|
|
|
initPassiveLoading: function pdfViewInitPassiveLoading() { |
|
|
|
var pdfDataRangeTransport = { |
|
|
|
var pdfDataRangeTransport = { |
|
|
@ -590,11 +492,7 @@ var PDFView = { |
|
|
|
this.pdfDocument = null; |
|
|
|
this.pdfDocument = null; |
|
|
|
|
|
|
|
|
|
|
|
this.pdfThumbnailViewer.removeAllThumbnails(); |
|
|
|
this.pdfThumbnailViewer.removeAllThumbnails(); |
|
|
|
|
|
|
|
this.pdfViewer.removeAllPages(); |
|
|
|
var container = document.getElementById('viewer'); |
|
|
|
|
|
|
|
while (container.hasChildNodes()) { |
|
|
|
|
|
|
|
container.removeChild(container.lastChild); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (typeof PDFBug !== 'undefined') { |
|
|
|
if (typeof PDFBug !== 'undefined') { |
|
|
|
PDFBug.cleanup(); |
|
|
|
PDFBug.cleanup(); |
|
|
@ -745,10 +643,10 @@ var PDFView = { |
|
|
|
self.pagesRefMap[destRef.num + ' ' + destRef.gen + ' R'] : |
|
|
|
self.pagesRefMap[destRef.num + ' ' + destRef.gen + ' R'] : |
|
|
|
(destRef + 1); |
|
|
|
(destRef + 1); |
|
|
|
if (pageNumber) { |
|
|
|
if (pageNumber) { |
|
|
|
if (pageNumber > self.pages.length) { |
|
|
|
if (pageNumber > self.pagesCount) { |
|
|
|
pageNumber = self.pages.length; |
|
|
|
pageNumber = self.pagesCount; |
|
|
|
} |
|
|
|
} |
|
|
|
var currentPage = self.pages[pageNumber - 1]; |
|
|
|
var currentPage = self.getPageView(pageNumber - 1); |
|
|
|
currentPage.scrollIntoView(dest); |
|
|
|
currentPage.scrollIntoView(dest); |
|
|
|
|
|
|
|
|
|
|
|
// Update the browsing history.
|
|
|
|
// Update the browsing history.
|
|
|
@ -774,6 +672,48 @@ var PDFView = { |
|
|
|
}); |
|
|
|
}); |
|
|
|
}, |
|
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
executeNamedAction: function pdfViewExecuteNamedAction(action) { |
|
|
|
|
|
|
|
// See PDF reference, table 8.45 - Named action
|
|
|
|
|
|
|
|
switch (action) { |
|
|
|
|
|
|
|
case 'GoToPage': |
|
|
|
|
|
|
|
document.getElementById('pageNumber').focus(); |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
case 'GoBack': |
|
|
|
|
|
|
|
PDFHistory.back(); |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
case 'GoForward': |
|
|
|
|
|
|
|
PDFHistory.forward(); |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
case 'Find': |
|
|
|
|
|
|
|
if (!PDFView.supportsIntegratedFind) { |
|
|
|
|
|
|
|
PDFView.findBar.toggle(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
case 'NextPage': |
|
|
|
|
|
|
|
PDFView.page++; |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
case 'PrevPage': |
|
|
|
|
|
|
|
PDFView.page--; |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
case 'LastPage': |
|
|
|
|
|
|
|
PDFView.page = PDFView.pagesCount; |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
case 'FirstPage': |
|
|
|
|
|
|
|
PDFView.page = 1; |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
default: |
|
|
|
|
|
|
|
break; // No action according to spec
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
getDestinationHash: function pdfViewGetDestinationHash(dest) { |
|
|
|
getDestinationHash: function pdfViewGetDestinationHash(dest) { |
|
|
|
if (typeof dest === 'string') { |
|
|
|
if (typeof dest === 'string') { |
|
|
|
return PDFView.getAnchorUrl('#' + escape(dest)); |
|
|
|
return PDFView.getAnchorUrl('#' + escape(dest)); |
|
|
@ -946,7 +886,6 @@ var PDFView = { |
|
|
|
|
|
|
|
|
|
|
|
this.pageRotation = 0; |
|
|
|
this.pageRotation = 0; |
|
|
|
|
|
|
|
|
|
|
|
var pages = this.pages = []; |
|
|
|
|
|
|
|
var pagesRefMap = this.pagesRefMap = {}; |
|
|
|
var pagesRefMap = this.pagesRefMap = {}; |
|
|
|
|
|
|
|
|
|
|
|
var resolvePagesPromise; |
|
|
|
var resolvePagesPromise; |
|
|
@ -956,7 +895,7 @@ var PDFView = { |
|
|
|
this.pagesPromise = pagesPromise; |
|
|
|
this.pagesPromise = pagesPromise; |
|
|
|
|
|
|
|
|
|
|
|
var firstPagePromise = pdfDocument.getPage(1); |
|
|
|
var firstPagePromise = pdfDocument.getPage(1); |
|
|
|
var container = document.getElementById('viewer'); |
|
|
|
var pagesViewer = this.pdfViewer; |
|
|
|
var thumbsViewer = this.pdfThumbnailViewer; |
|
|
|
var thumbsViewer = this.pdfThumbnailViewer; |
|
|
|
|
|
|
|
|
|
|
|
// Fetch a single page so we can get a viewport that will be the default
|
|
|
|
// Fetch a single page so we can get a viewport that will be the default
|
|
|
@ -965,12 +904,9 @@ var PDFView = { |
|
|
|
var viewport = pdfPage.getViewport((scale || 1.0) * CSS_UNITS); |
|
|
|
var viewport = pdfPage.getViewport((scale || 1.0) * CSS_UNITS); |
|
|
|
for (var pageNum = 1; pageNum <= pagesCount; ++pageNum) { |
|
|
|
for (var pageNum = 1; pageNum <= pagesCount; ++pageNum) { |
|
|
|
var viewportClone = viewport.clone(); |
|
|
|
var viewportClone = viewport.clone(); |
|
|
|
var pageView = new PageView(container, pageNum, scale, |
|
|
|
var pageView = pagesViewer.addPage(pageNum, scale, viewportClone); |
|
|
|
self.navigateTo.bind(self), |
|
|
|
|
|
|
|
viewportClone); |
|
|
|
|
|
|
|
var thumbnailView = thumbsViewer.addThumbnail(pageNum, viewportClone); |
|
|
|
var thumbnailView = thumbsViewer.addThumbnail(pageNum, viewportClone); |
|
|
|
bindOnAfterDraw(pageView, thumbnailView); |
|
|
|
bindOnAfterDraw(pageView, thumbnailView); |
|
|
|
pages.push(pageView); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// Fetch all the pages since the viewport is needed before printing
|
|
|
|
// Fetch all the pages since the viewport is needed before printing
|
|
|
@ -981,7 +917,7 @@ var PDFView = { |
|
|
|
var getPagesLeft = pagesCount; |
|
|
|
var getPagesLeft = pagesCount; |
|
|
|
for (var pageNum = 1; pageNum <= pagesCount; ++pageNum) { |
|
|
|
for (var pageNum = 1; pageNum <= pagesCount; ++pageNum) { |
|
|
|
pdfDocument.getPage(pageNum).then(function (pageNum, pdfPage) { |
|
|
|
pdfDocument.getPage(pageNum).then(function (pageNum, pdfPage) { |
|
|
|
var pageView = pages[pageNum - 1]; |
|
|
|
var pageView = PDFView.getPageView(pageNum - 1); |
|
|
|
if (!pageView.pdfPage) { |
|
|
|
if (!pageView.pdfPage) { |
|
|
|
pageView.setPdfPage(pdfPage); |
|
|
|
pageView.setPdfPage(pdfPage); |
|
|
|
} |
|
|
|
} |
|
|
@ -1005,7 +941,7 @@ var PDFView = { |
|
|
|
window.dispatchEvent(event); |
|
|
|
window.dispatchEvent(event); |
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
PDFView.loadingBar.setWidth(container); |
|
|
|
PDFView.loadingBar.setWidth(document.getElementById('viewer')); |
|
|
|
|
|
|
|
|
|
|
|
PDFView.findController.resolveFirstPage(); |
|
|
|
PDFView.findController.resolveFirstPage(); |
|
|
|
|
|
|
|
|
|
|
@ -1031,7 +967,8 @@ var PDFView = { |
|
|
|
var storedHash = null; |
|
|
|
var storedHash = null; |
|
|
|
if (showPreviousViewOnLoad && store.get('exists', false)) { |
|
|
|
if (showPreviousViewOnLoad && store.get('exists', false)) { |
|
|
|
var pageNum = store.get('page', '1'); |
|
|
|
var pageNum = store.get('page', '1'); |
|
|
|
var zoom = defaultZoomValue || store.get('zoom', PDFView.currentScale); |
|
|
|
var zoom = defaultZoomValue || |
|
|
|
|
|
|
|
store.get('zoom', PDFView.pdfViewer.currentScale); |
|
|
|
var left = store.get('scrollLeft', '0'); |
|
|
|
var left = store.get('scrollLeft', '0'); |
|
|
|
var top = store.get('scrollTop', '0'); |
|
|
|
var top = store.get('scrollTop', '0'); |
|
|
|
|
|
|
|
|
|
|
@ -1045,9 +982,9 @@ var PDFView = { |
|
|
|
// Make all navigation keys work on document load,
|
|
|
|
// Make all navigation keys work on document load,
|
|
|
|
// unless the viewer is embedded in a web page.
|
|
|
|
// unless the viewer is embedded in a web page.
|
|
|
|
if (!self.isViewerEmbedded) { |
|
|
|
if (!self.isViewerEmbedded) { |
|
|
|
self.container.focus(); |
|
|
|
self.pdfViewer.focus(); |
|
|
|
//#if (FIREFOX || MOZCENTRAL)
|
|
|
|
//#if (FIREFOX || MOZCENTRAL)
|
|
|
|
// self.container.blur();
|
|
|
|
// self.pdfViewer.blur();
|
|
|
|
//#endif
|
|
|
|
//#endif
|
|
|
|
} |
|
|
|
} |
|
|
|
}, function rejected(reason) { |
|
|
|
}, function rejected(reason) { |
|
|
@ -1183,15 +1120,13 @@ var PDFView = { |
|
|
|
setInitialView: function pdfViewSetInitialView(storedHash, scale) { |
|
|
|
setInitialView: function pdfViewSetInitialView(storedHash, scale) { |
|
|
|
// Reset the current scale, as otherwise the page's scale might not get
|
|
|
|
// Reset the current scale, as otherwise the page's scale might not get
|
|
|
|
// updated if the zoom level stayed the same.
|
|
|
|
// updated if the zoom level stayed the same.
|
|
|
|
this.currentScale = UNKNOWN_SCALE; |
|
|
|
this.pdfViewer.resetView(); |
|
|
|
this.currentScaleValue = null; |
|
|
|
|
|
|
|
// When opening a new file (when one is already loaded in the viewer):
|
|
|
|
// When opening a new file (when one is already loaded in the viewer):
|
|
|
|
// Reset 'currentPageNumber', since otherwise the page's scale will be wrong
|
|
|
|
// Reset 'currentPageNumber', since otherwise the page's scale will be wrong
|
|
|
|
// if 'currentPageNumber' is larger than the number of pages in the file.
|
|
|
|
// if 'currentPageNumber' is larger than the number of pages in the file.
|
|
|
|
document.getElementById('pageNumber').value = currentPageNumber = 1; |
|
|
|
document.getElementById('pageNumber').value = |
|
|
|
// Reset the current position when loading a new file,
|
|
|
|
this.pdfViewer.currentPageNumber = 1; |
|
|
|
// to prevent displaying the wrong position in the document.
|
|
|
|
|
|
|
|
this.currentPosition = null; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (PDFHistory.initialDestination) { |
|
|
|
if (PDFHistory.initialDestination) { |
|
|
|
this.navigateTo(PDFHistory.initialDestination); |
|
|
|
this.navigateTo(PDFHistory.initialDestination); |
|
|
@ -1203,14 +1138,14 @@ var PDFView = { |
|
|
|
} else if (storedHash) { |
|
|
|
} else if (storedHash) { |
|
|
|
this.setHash(storedHash); |
|
|
|
this.setHash(storedHash); |
|
|
|
} else if (scale) { |
|
|
|
} else if (scale) { |
|
|
|
this.setScale(scale, true); |
|
|
|
this.pdfViewer.setScale(scale, true); |
|
|
|
this.page = 1; |
|
|
|
this.page = 1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (PDFView.currentScale === UNKNOWN_SCALE) { |
|
|
|
if (PDFView.pdfViewer.currentScale === UNKNOWN_SCALE) { |
|
|
|
// Scale was not initialized: invalid bookmark or scale was not specified.
|
|
|
|
// Scale was not initialized: invalid bookmark or scale was not specified.
|
|
|
|
// Setting the default one.
|
|
|
|
// Setting the default one.
|
|
|
|
this.setScale(DEFAULT_SCALE, true); |
|
|
|
this.pdfViewer.setScale(DEFAULT_SCALE, true); |
|
|
|
} |
|
|
|
} |
|
|
|
}, |
|
|
|
}, |
|
|
|
|
|
|
|
|
|
|
@ -1222,11 +1157,7 @@ var PDFView = { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// Pages have a higher priority than thumbnails, so check them first.
|
|
|
|
// Pages have a higher priority than thumbnails, so check them first.
|
|
|
|
var visiblePages = currentlyVisiblePages || this.getVisiblePages(); |
|
|
|
if (this.pdfViewer.forceRendering(currentlyVisiblePages)) { |
|
|
|
var pageView = this.getHighestPriority(visiblePages, this.pages, |
|
|
|
|
|
|
|
this.pageViewScroll.down); |
|
|
|
|
|
|
|
if (pageView) { |
|
|
|
|
|
|
|
this.renderView(pageView, 'page'); |
|
|
|
|
|
|
|
return; |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
// No pages needed rendering so check thumbnails.
|
|
|
|
// No pages needed rendering so check thumbnails.
|
|
|
@ -1247,15 +1178,9 @@ var PDFView = { |
|
|
|
}, |
|
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
cleanup: function pdfViewCleanup() { |
|
|
|
cleanup: function pdfViewCleanup() { |
|
|
|
for (var i = 0, ii = this.pages.length; i < ii; i++) { |
|
|
|
this.pdfViewer.cleanup(); |
|
|
|
if (this.pages[i] && |
|
|
|
|
|
|
|
this.pages[i].renderingState !== RenderingStates.FINISHED) { |
|
|
|
|
|
|
|
this.pages[i].reset(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
this.pdfDocument.cleanup(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
this.pdfThumbnailViewer.cleanup(); |
|
|
|
this.pdfThumbnailViewer.cleanup(); |
|
|
|
|
|
|
|
this.pdfDocument.cleanup(); |
|
|
|
}, |
|
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
getHighestPriority: function pdfViewGetHighestPriority(visible, views, |
|
|
|
getHighestPriority: function pdfViewGetHighestPriority(visible, views, |
|
|
@ -1363,7 +1288,7 @@ var PDFView = { |
|
|
|
zoomArg]; |
|
|
|
zoomArg]; |
|
|
|
} |
|
|
|
} |
|
|
|
if (dest) { |
|
|
|
if (dest) { |
|
|
|
var currentPage = this.pages[(pageNumber || this.page) - 1]; |
|
|
|
var currentPage = this.getPageView((pageNumber || this.page) - 1); |
|
|
|
currentPage.scrollIntoView(dest); |
|
|
|
currentPage.scrollIntoView(dest); |
|
|
|
} else if (pageNumber) { |
|
|
|
} else if (pageNumber) { |
|
|
|
this.page = pageNumber; // simple page
|
|
|
|
this.page = pageNumber; // simple page
|
|
|
@ -1443,19 +1368,6 @@ var PDFView = { |
|
|
|
} |
|
|
|
} |
|
|
|
}, |
|
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
getVisiblePages: function pdfViewGetVisiblePages() { |
|
|
|
|
|
|
|
if (!PresentationMode.active) { |
|
|
|
|
|
|
|
return getVisibleElements(this.container, this.pages, true); |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
// The algorithm in getVisibleElements doesn't work in all browsers and
|
|
|
|
|
|
|
|
// configurations when presentation mode is active.
|
|
|
|
|
|
|
|
var visible = []; |
|
|
|
|
|
|
|
var currentPage = this.pages[this.page - 1]; |
|
|
|
|
|
|
|
visible.push({ id: currentPage.id, view: currentPage }); |
|
|
|
|
|
|
|
return { first: currentPage, last: currentPage, views: visible }; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Helper function to parse query string (e.g. ?param1=value&parm2=...).
|
|
|
|
// Helper function to parse query string (e.g. ?param1=value&parm2=...).
|
|
|
|
parseQueryString: function pdfViewParseQueryString(query) { |
|
|
|
parseQueryString: function pdfViewParseQueryString(query) { |
|
|
|
var parts = query.split('&'); |
|
|
|
var parts = query.split('&'); |
|
|
@ -1479,11 +1391,11 @@ var PDFView = { |
|
|
|
|
|
|
|
|
|
|
|
var alertNotReady = false; |
|
|
|
var alertNotReady = false; |
|
|
|
var i, ii; |
|
|
|
var i, ii; |
|
|
|
if (!this.pages.length) { |
|
|
|
if (!this.pagesCount) { |
|
|
|
alertNotReady = true; |
|
|
|
alertNotReady = true; |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
for (i = 0, ii = this.pages.length; i < ii; ++i) { |
|
|
|
for (i = 0, ii = this.pagesCount; i < ii; ++i) { |
|
|
|
if (!this.pages[i].pdfPage) { |
|
|
|
if (!this.getPageView(i).pdfPage) { |
|
|
|
alertNotReady = true; |
|
|
|
alertNotReady = true; |
|
|
|
break; |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
@ -1501,8 +1413,8 @@ var PDFView = { |
|
|
|
|
|
|
|
|
|
|
|
var body = document.querySelector('body'); |
|
|
|
var body = document.querySelector('body'); |
|
|
|
body.setAttribute('data-mozPrintCallback', true); |
|
|
|
body.setAttribute('data-mozPrintCallback', true); |
|
|
|
for (i = 0, ii = this.pages.length; i < ii; ++i) { |
|
|
|
for (i = 0, ii = this.pagesCount; i < ii; ++i) { |
|
|
|
this.pages[i].beforePrint(); |
|
|
|
this.getPageView(i).beforePrint(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//#if (FIREFOX || MOZCENTRAL)
|
|
|
|
//#if (FIREFOX || MOZCENTRAL)
|
|
|
@ -1522,20 +1434,17 @@ var PDFView = { |
|
|
|
this.renderHighestPriority(); |
|
|
|
this.renderHighestPriority(); |
|
|
|
}, |
|
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
rotatePages: function pdfViewRotatePages(delta) { |
|
|
|
setScale: function (value, resetAutoSettings, noScroll) { |
|
|
|
var currentPage = this.pages[this.page - 1]; |
|
|
|
this.pdfViewer.setScale(value, resetAutoSettings, noScroll); |
|
|
|
var i, l; |
|
|
|
}, |
|
|
|
this.pageRotation = (this.pageRotation + 360 + delta) % 360; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (i = 0, l = this.pages.length; i < l; i++) { |
|
|
|
rotatePages: function pdfViewRotatePages(delta) { |
|
|
|
var page = this.pages[i]; |
|
|
|
var currentPage = this.getPageView(this.page - 1); |
|
|
|
page.update(page.scale, this.pageRotation); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
this.pageRotation = (this.pageRotation + 360 + delta) % 360; |
|
|
|
|
|
|
|
this.pdfViewer.updateRotation(this.pageRotation); |
|
|
|
this.pdfThumbnailViewer.updateRotation(this.pageRotation); |
|
|
|
this.pdfThumbnailViewer.updateRotation(this.pageRotation); |
|
|
|
|
|
|
|
|
|
|
|
this.setScale(this.currentScaleValue, true, true); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
this.renderHighestPriority(); |
|
|
|
this.renderHighestPriority(); |
|
|
|
|
|
|
|
|
|
|
|
if (currentPage) { |
|
|
|
if (currentPage) { |
|
|
@ -1590,7 +1499,7 @@ var PDFView = { |
|
|
|
// In case we are already on the first or the last page there is no need
|
|
|
|
// In case we are already on the first or the last page there is no need
|
|
|
|
// to do anything.
|
|
|
|
// to do anything.
|
|
|
|
if ((currentPage === 1 && pageFlipDirection === PageFlipDirection.UP) || |
|
|
|
if ((currentPage === 1 && pageFlipDirection === PageFlipDirection.UP) || |
|
|
|
(currentPage === this.pages.length && |
|
|
|
(currentPage === this.pagesCount && |
|
|
|
pageFlipDirection === PageFlipDirection.DOWN)) { |
|
|
|
pageFlipDirection === PageFlipDirection.DOWN)) { |
|
|
|
return; |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
@ -1613,6 +1522,7 @@ var PDFView = { |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
//#include page_view.js
|
|
|
|
//#include page_view.js
|
|
|
|
|
|
|
|
//#include pdf_viewer.js
|
|
|
|
//#include thumbnail_view.js
|
|
|
|
//#include thumbnail_view.js
|
|
|
|
//#include text_layer_builder.js
|
|
|
|
//#include text_layer_builder.js
|
|
|
|
//#include document_outline_view.js
|
|
|
|
//#include document_outline_view.js
|
|
|
@ -1847,7 +1757,7 @@ function webViewerInitialized() { |
|
|
|
|
|
|
|
|
|
|
|
document.getElementById('scaleSelect').addEventListener('change', |
|
|
|
document.getElementById('scaleSelect').addEventListener('change', |
|
|
|
function() { |
|
|
|
function() { |
|
|
|
PDFView.setScale(this.value); |
|
|
|
PDFView.pdfViewer.setScale(this.value); |
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
document.getElementById('presentationMode').addEventListener('click', |
|
|
|
document.getElementById('presentationMode').addEventListener('click', |
|
|
@ -1905,100 +1815,49 @@ function webViewerInitialized() { |
|
|
|
document.addEventListener('DOMContentLoaded', webViewerLoad, true); |
|
|
|
document.addEventListener('DOMContentLoaded', webViewerLoad, true); |
|
|
|
|
|
|
|
|
|
|
|
function updateViewarea() { |
|
|
|
function updateViewarea() { |
|
|
|
|
|
|
|
|
|
|
|
if (!PDFView.initialized) { |
|
|
|
if (!PDFView.initialized) { |
|
|
|
return; |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
var visible = PDFView.getVisiblePages(); |
|
|
|
PDFView.pdfViewer.update(); |
|
|
|
var visiblePages = visible.views; |
|
|
|
} |
|
|
|
if (visiblePages.length === 0) { |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var suggestedCacheSize = Math.max(DEFAULT_CACHE_SIZE, |
|
|
|
|
|
|
|
2 * visiblePages.length + 1); |
|
|
|
|
|
|
|
cache.resize(suggestedCacheSize); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
PDFView.renderHighestPriority(visible); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var currentId = PDFView.page; |
|
|
|
|
|
|
|
var firstPage = visible.first; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (var i = 0, ii = visiblePages.length, stillFullyVisible = false; |
|
|
|
|
|
|
|
i < ii; ++i) { |
|
|
|
|
|
|
|
var page = visiblePages[i]; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (page.percent < 100) { |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (page.id === PDFView.page) { |
|
|
|
|
|
|
|
stillFullyVisible = true; |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!stillFullyVisible) { |
|
|
|
window.addEventListener('updateviewarea', function () { |
|
|
|
currentId = visiblePages[0].id; |
|
|
|
if (!PDFView.initialized) { |
|
|
|
|
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (!PresentationMode.active) { |
|
|
|
var location = PDFView.pdfViewer.location; |
|
|
|
updateViewarea.inProgress = true; // used in "set page"
|
|
|
|
|
|
|
|
PDFView.page = currentId; |
|
|
|
|
|
|
|
updateViewarea.inProgress = false; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var currentScale = PDFView.currentScale; |
|
|
|
|
|
|
|
var currentScaleValue = PDFView.currentScaleValue; |
|
|
|
|
|
|
|
var normalizedScaleValue = parseFloat(currentScaleValue) === currentScale ? |
|
|
|
|
|
|
|
Math.round(currentScale * 10000) / 100 : currentScaleValue; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var pageNumber = firstPage.id; |
|
|
|
|
|
|
|
var pdfOpenParams = '#page=' + pageNumber; |
|
|
|
|
|
|
|
pdfOpenParams += '&zoom=' + normalizedScaleValue; |
|
|
|
|
|
|
|
var currentPage = PDFView.pages[pageNumber - 1]; |
|
|
|
|
|
|
|
var container = PDFView.container; |
|
|
|
|
|
|
|
var topLeft = currentPage.getPagePoint((container.scrollLeft - firstPage.x), |
|
|
|
|
|
|
|
(container.scrollTop - firstPage.y)); |
|
|
|
|
|
|
|
var intLeft = Math.round(topLeft[0]); |
|
|
|
|
|
|
|
var intTop = Math.round(topLeft[1]); |
|
|
|
|
|
|
|
pdfOpenParams += ',' + intLeft + ',' + intTop; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (PresentationMode.active || PresentationMode.switchInProgress) { |
|
|
|
|
|
|
|
PDFView.currentPosition = null; |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
PDFView.currentPosition = { page: pageNumber, left: intLeft, top: intTop }; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
PDFView.store.initializedPromise.then(function() { |
|
|
|
PDFView.store.initializedPromise.then(function() { |
|
|
|
PDFView.store.setMultiple({ |
|
|
|
PDFView.store.setMultiple({ |
|
|
|
'exists': true, |
|
|
|
'exists': true, |
|
|
|
'page': pageNumber, |
|
|
|
'page': location.pageNumber, |
|
|
|
'zoom': normalizedScaleValue, |
|
|
|
'zoom': location.scale, |
|
|
|
'scrollLeft': intLeft, |
|
|
|
'scrollLeft': location.left, |
|
|
|
'scrollTop': intTop |
|
|
|
'scrollTop': location.top |
|
|
|
}).catch(function() { |
|
|
|
}).catch(function() { |
|
|
|
// unable to write to storage
|
|
|
|
// unable to write to storage
|
|
|
|
}); |
|
|
|
}); |
|
|
|
}); |
|
|
|
}); |
|
|
|
var href = PDFView.getAnchorUrl(pdfOpenParams); |
|
|
|
var href = PDFView.getAnchorUrl(location.pdfOpenParams); |
|
|
|
document.getElementById('viewBookmark').href = href; |
|
|
|
document.getElementById('viewBookmark').href = href; |
|
|
|
document.getElementById('secondaryViewBookmark').href = href; |
|
|
|
document.getElementById('secondaryViewBookmark').href = href; |
|
|
|
|
|
|
|
|
|
|
|
// Update the current bookmark in the browsing history.
|
|
|
|
// Update the current bookmark in the browsing history.
|
|
|
|
PDFHistory.updateCurrentBookmark(pdfOpenParams, pageNumber); |
|
|
|
PDFHistory.updateCurrentBookmark(location.pdfOpenParams, location.pageNumber); |
|
|
|
} |
|
|
|
}, true); |
|
|
|
|
|
|
|
|
|
|
|
window.addEventListener('resize', function webViewerResize(evt) { |
|
|
|
window.addEventListener('resize', function webViewerResize(evt) { |
|
|
|
if (PDFView.initialized && |
|
|
|
if (PDFView.initialized && |
|
|
|
(document.getElementById('pageWidthOption').selected || |
|
|
|
(document.getElementById('pageWidthOption').selected || |
|
|
|
document.getElementById('pageFitOption').selected || |
|
|
|
document.getElementById('pageFitOption').selected || |
|
|
|
document.getElementById('pageAutoOption').selected)) { |
|
|
|
document.getElementById('pageAutoOption').selected)) { |
|
|
|
PDFView.setScale(document.getElementById('scaleSelect').value); |
|
|
|
PDFView.pdfViewer.setScale(document.getElementById('scaleSelect').value); |
|
|
|
} |
|
|
|
} |
|
|
|
updateViewarea(); |
|
|
|
updateViewarea(); |
|
|
|
|
|
|
|
|
|
|
|
// Set the 'max-height' CSS property of the secondary toolbar.
|
|
|
|
// Set the 'max-height' CSS property of the secondary toolbar.
|
|
|
|
SecondaryToolbar.setMaxHeight(PDFView.container); |
|
|
|
SecondaryToolbar.setMaxHeight(document.getElementById('viewerContainer')); |
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
window.addEventListener('hashchange', function webViewerHashchange(evt) { |
|
|
|
window.addEventListener('hashchange', function webViewerHashchange(evt) { |
|
|
@ -2077,7 +1936,7 @@ window.addEventListener('localized', function localized(evt) { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// Set the 'max-height' CSS property of the secondary toolbar.
|
|
|
|
// Set the 'max-height' CSS property of the secondary toolbar.
|
|
|
|
SecondaryToolbar.setMaxHeight(PDFView.container); |
|
|
|
SecondaryToolbar.setMaxHeight(document.getElementById('viewerContainer')); |
|
|
|
}); |
|
|
|
}); |
|
|
|
}, true); |
|
|
|
}, true); |
|
|
|
|
|
|
|
|
|
|
@ -2096,6 +1955,12 @@ window.addEventListener('scalechange', function scalechange(evt) { |
|
|
|
return; |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (evt.presetValue) { |
|
|
|
|
|
|
|
selectScaleOption(evt.presetValue); |
|
|
|
|
|
|
|
updateViewarea(); |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
var predefinedValueFound = selectScaleOption('' + evt.scale); |
|
|
|
var predefinedValueFound = selectScaleOption('' + evt.scale); |
|
|
|
if (!predefinedValueFound) { |
|
|
|
if (!predefinedValueFound) { |
|
|
|
customScaleOption.textContent = Math.round(evt.scale * 10000) / 100 + '%'; |
|
|
|
customScaleOption.textContent = Math.round(evt.scale * 10000) / 100 + '%'; |
|
|
@ -2106,17 +1971,27 @@ window.addEventListener('scalechange', function scalechange(evt) { |
|
|
|
|
|
|
|
|
|
|
|
window.addEventListener('pagechange', function pagechange(evt) { |
|
|
|
window.addEventListener('pagechange', function pagechange(evt) { |
|
|
|
var page = evt.pageNumber; |
|
|
|
var page = evt.pageNumber; |
|
|
|
if (PDFView.previousPageNumber !== page) { |
|
|
|
if (PDFView.pdfViewer.previousPageNumber !== page) { |
|
|
|
document.getElementById('pageNumber').value = page; |
|
|
|
document.getElementById('pageNumber').value = page; |
|
|
|
PDFView.pdfThumbnailViewer.updatePage(page); |
|
|
|
PDFView.pdfThumbnailViewer.updatePage(page); |
|
|
|
} |
|
|
|
} |
|
|
|
var numPages = PDFView.pages.length; |
|
|
|
var numPages = PDFView.pagesCount; |
|
|
|
|
|
|
|
|
|
|
|
document.getElementById('previous').disabled = (page <= 1); |
|
|
|
document.getElementById('previous').disabled = (page <= 1); |
|
|
|
document.getElementById('next').disabled = (page >= numPages); |
|
|
|
document.getElementById('next').disabled = (page >= numPages); |
|
|
|
|
|
|
|
|
|
|
|
document.getElementById('firstPage').disabled = (page <= 1); |
|
|
|
document.getElementById('firstPage').disabled = (page <= 1); |
|
|
|
document.getElementById('lastPage').disabled = (page >= numPages); |
|
|
|
document.getElementById('lastPage').disabled = (page >= numPages); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// checking if the this.page was called from the updateViewarea function
|
|
|
|
|
|
|
|
if (evt.updateInProgress) { |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
// Avoid scrolling the first page during loading
|
|
|
|
|
|
|
|
if (this.loading && page === 1) { |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
PDFView.getPageView(page - 1).scrollIntoView(); |
|
|
|
}, true); |
|
|
|
}, true); |
|
|
|
|
|
|
|
|
|
|
|
function handleMouseWheel(evt) { |
|
|
|
function handleMouseWheel(evt) { |
|
|
@ -2138,7 +2013,8 @@ window.addEventListener('mousewheel', handleMouseWheel); |
|
|
|
|
|
|
|
|
|
|
|
window.addEventListener('click', function click(evt) { |
|
|
|
window.addEventListener('click', function click(evt) { |
|
|
|
if (!PresentationMode.active) { |
|
|
|
if (!PresentationMode.active) { |
|
|
|
if (SecondaryToolbar.opened && PDFView.container.contains(evt.target)) { |
|
|
|
if (SecondaryToolbar.opened && |
|
|
|
|
|
|
|
PDFView.pdfViewer.containsElement(evt.target)) { |
|
|
|
SecondaryToolbar.close(); |
|
|
|
SecondaryToolbar.close(); |
|
|
|
} |
|
|
|
} |
|
|
|
} else if (evt.button === 0) { |
|
|
|
} else if (evt.button === 0) { |
|
|
@ -2194,7 +2070,7 @@ window.addEventListener('keydown', function keydown(evt) { |
|
|
|
// keeping it unhandled (to restore page zoom to 100%)
|
|
|
|
// keeping it unhandled (to restore page zoom to 100%)
|
|
|
|
setTimeout(function () { |
|
|
|
setTimeout(function () { |
|
|
|
// ... and resetting the scale after browser adjusts its scale
|
|
|
|
// ... and resetting the scale after browser adjusts its scale
|
|
|
|
PDFView.setScale(DEFAULT_SCALE, true); |
|
|
|
PDFView.pdfViewer.setScale(DEFAULT_SCALE, true); |
|
|
|
}); |
|
|
|
}); |
|
|
|
handled = false; |
|
|
|
handled = false; |
|
|
|
break; |
|
|
|
break; |
|
|
@ -2259,7 +2135,7 @@ window.addEventListener('keydown', function keydown(evt) { |
|
|
|
/* falls through */ |
|
|
|
/* falls through */ |
|
|
|
case 37: // left arrow
|
|
|
|
case 37: // left arrow
|
|
|
|
// horizontal scrolling using arrow keys
|
|
|
|
// horizontal scrolling using arrow keys
|
|
|
|
if (PDFView.isHorizontalScrollbarEnabled) { |
|
|
|
if (PDFView.pdfViewer.isHorizontalScrollbarEnabled) { |
|
|
|
break; |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
/* falls through */ |
|
|
|
/* falls through */ |
|
|
@ -2288,7 +2164,7 @@ window.addEventListener('keydown', function keydown(evt) { |
|
|
|
/* falls through */ |
|
|
|
/* falls through */ |
|
|
|
case 39: // right arrow
|
|
|
|
case 39: // right arrow
|
|
|
|
// horizontal scrolling using arrow keys
|
|
|
|
// horizontal scrolling using arrow keys
|
|
|
|
if (PDFView.isHorizontalScrollbarEnabled) { |
|
|
|
if (PDFView.pdfViewer.isHorizontalScrollbarEnabled) { |
|
|
|
break; |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
/* falls through */ |
|
|
|
/* falls through */ |
|
|
@ -2306,8 +2182,8 @@ window.addEventListener('keydown', function keydown(evt) { |
|
|
|
break; |
|
|
|
break; |
|
|
|
case 35: // end
|
|
|
|
case 35: // end
|
|
|
|
if (PresentationMode.active || (PDFView.pdfDocument && |
|
|
|
if (PresentationMode.active || (PDFView.pdfDocument && |
|
|
|
PDFView.page < PDFView.pdfDocument.numPages)) { |
|
|
|
PDFView.page < PDFView.pagesCount)) { |
|
|
|
PDFView.page = PDFView.pdfDocument.numPages; |
|
|
|
PDFView.page = PDFView.pagesCount; |
|
|
|
handled = true; |
|
|
|
handled = true; |
|
|
|
} |
|
|
|
} |
|
|
|
break; |
|
|
|
break; |
|
|
@ -2344,21 +2220,21 @@ window.addEventListener('keydown', function keydown(evt) { |
|
|
|
// 33=Page Up 34=Page Down 35=End 36=Home
|
|
|
|
// 33=Page Up 34=Page Down 35=End 36=Home
|
|
|
|
// 37=Left 38=Up 39=Right 40=Down
|
|
|
|
// 37=Left 38=Up 39=Right 40=Down
|
|
|
|
if (evt.keyCode >= 33 && evt.keyCode <= 40 && |
|
|
|
if (evt.keyCode >= 33 && evt.keyCode <= 40 && |
|
|
|
!PDFView.container.contains(curElement)) { |
|
|
|
!PDFView.pdfViewer.containsElement(curElement)) { |
|
|
|
// The page container is not focused, but a page navigation key has been
|
|
|
|
// The page container is not focused, but a page navigation key has been
|
|
|
|
// pressed. Change the focus to the viewer container to make sure that
|
|
|
|
// pressed. Change the focus to the viewer container to make sure that
|
|
|
|
// navigation by keyboard works as expected.
|
|
|
|
// navigation by keyboard works as expected.
|
|
|
|
PDFView.container.focus(); |
|
|
|
PDFView.pdfViewer.focus(); |
|
|
|
} |
|
|
|
} |
|
|
|
// 32=Spacebar
|
|
|
|
// 32=Spacebar
|
|
|
|
if (evt.keyCode === 32 && curElementTagName !== 'BUTTON') { |
|
|
|
if (evt.keyCode === 32 && curElementTagName !== 'BUTTON') { |
|
|
|
//#if (FIREFOX || MOZCENTRAL)
|
|
|
|
//#if (FIREFOX || MOZCENTRAL)
|
|
|
|
// // Workaround for issue in Firefox, that prevents scroll keys from
|
|
|
|
// // Workaround for issue in Firefox, that prevents scroll keys from
|
|
|
|
// // working when elements with 'tabindex' are focused. (#3498)
|
|
|
|
// // working when elements with 'tabindex' are focused. (#3498)
|
|
|
|
// PDFView.container.blur();
|
|
|
|
// PDFView.pdfViewer.blur();
|
|
|
|
//#else
|
|
|
|
//#else
|
|
|
|
if (!PDFView.container.contains(curElement)) { |
|
|
|
if (!PDFView.pdfViewer.containsElement(curElement)) { |
|
|
|
PDFView.container.focus(); |
|
|
|
PDFView.pdfViewer.focus(); |
|
|
|
} |
|
|
|
} |
|
|
|
//#endif
|
|
|
|
//#endif
|
|
|
|
} |
|
|
|
} |
|
|
|