@ -241,6 +241,8 @@ var PDFView = {
sidebarOpen : false ,
sidebarOpen : false ,
pageViewScroll : null ,
pageViewScroll : null ,
thumbnailViewScroll : null ,
thumbnailViewScroll : null ,
isFullscreen : false ,
previousScale : null ,
// called once when the document is loaded
// called once when the document is loaded
initialize : function pdfViewInitialize ( ) {
initialize : function pdfViewInitialize ( ) {
@ -307,6 +309,7 @@ var PDFView = {
var container = this . container ;
var container = this . container ;
var currentPage = this . pages [ this . page - 1 ] ;
var currentPage = this . pages [ this . page - 1 ] ;
var pageWidthScale = ( container . clientWidth - kScrollbarPadding ) /
var pageWidthScale = ( container . clientWidth - kScrollbarPadding ) /
currentPage . width * currentPage . scale / kCssUnits ;
currentPage . width * currentPage . scale / kCssUnits ;
var pageHeightScale = ( container . clientHeight - kScrollbarPadding ) /
var pageHeightScale = ( container . clientHeight - kScrollbarPadding ) /
@ -390,6 +393,17 @@ var PDFView = {
return value ;
return value ;
} ,
} ,
get supportsFullscreen ( ) {
var doc = document . documentElement ;
var support = doc . requestFullScreen || doc . mozRequestFullScreen ||
doc . webkitRequestFullScreen ;
Object . defineProperty ( this , 'supportsFullScreen' , { value : support ,
enumerable : true ,
configurable : true ,
writable : false } ) ;
return support ;
} ,
open : function pdfViewOpen ( url , scale , password ) {
open : function pdfViewOpen ( url , scale , password ) {
var parameters = { password : password } ;
var parameters = { password : password } ;
if ( typeof url === 'string' ) { // URL
if ( typeof url === 'string' ) { // URL
@ -786,7 +800,7 @@ var PDFView = {
}
}
for ( var i = 0 ; i < numVisible ; ++ i ) {
for ( var i = 0 ; i < numVisible ; ++ i ) {
var view = visibleViews [ i ] . view ;
var view = visibleViews [ i ] . view ;
if ( ! this . isViewFinshed ( view ) )
if ( ! this . isViewFini shed ( view ) )
return view ;
return view ;
}
}
@ -795,19 +809,19 @@ var PDFView = {
var lastVisible = visibleViews [ visibleViews . length - 1 ] ;
var lastVisible = visibleViews [ visibleViews . length - 1 ] ;
var nextPageIndex = lastVisible . id ;
var nextPageIndex = lastVisible . id ;
// ID's start at 1 so no need to add 1.
// ID's start at 1 so no need to add 1.
if ( views [ nextPageIndex ] && ! this . isViewFinshed ( views [ nextPageIndex ] ) )
if ( views [ nextPageIndex ] && ! this . isViewFini shed ( views [ nextPageIndex ] ) )
return views [ nextPageIndex ] ;
return views [ nextPageIndex ] ;
} else {
} else {
var previousPageIndex = visibleViews [ 0 ] . id - 2 ;
var previousPageIndex = visibleViews [ 0 ] . id - 2 ;
if ( views [ previousPageIndex ] &&
if ( views [ previousPageIndex ] &&
! this . isViewFinshed ( views [ previousPageIndex ] ) )
! this . isViewFini shed ( views [ previousPageIndex ] ) )
return views [ previousPageIndex ] ;
return views [ previousPageIndex ] ;
}
}
// Everything that needs to be rendered has been.
// Everything that needs to be rendered has been.
return false ;
return false ;
} ,
} ,
isViewFinshed : function pdfViewNeedsRendering ( view ) {
isViewFini shed : function pdfViewNeedsRendering ( view ) {
return view . renderingState === RenderingStates . FINISHED ;
return view . renderingState === RenderingStates . FINISHED ;
} ,
} ,
@ -1029,6 +1043,18 @@ var PDFView = {
}
}
var visible = [ ] ;
var visible = [ ] ;
// Algorithm broken in fullscreen mode
if ( this . isFullscreen ) {
var currentPage = this . pages [ this . page - 1 ] ;
visible . push ( {
id : currentPage . id ,
view : currentPage
} ) ;
return visible ;
}
var bottom = top + scrollEl . clientHeight ;
var bottom = top + scrollEl . clientHeight ;
for ( ; i <= views . length && currentHeight < bottom ; ++ i ) {
for ( ; i <= views . length && currentHeight < bottom ; ++ i ) {
view = views [ i - 1 ] ;
view = views [ i - 1 ] ;
@ -1072,6 +1098,44 @@ var PDFView = {
var div = document . getElementById ( 'printContainer' ) ;
var div = document . getElementById ( 'printContainer' ) ;
while ( div . hasChildNodes ( ) )
while ( div . hasChildNodes ( ) )
div . removeChild ( div . lastChild ) ;
div . removeChild ( div . lastChild ) ;
} ,
fullscreen : function pdfViewFullscreen ( ) {
var isFullscreen = document . fullscreen || document . mozFullScreen ||
document . webkitIsFullScreen ;
if ( isFullscreen ) {
return false ;
}
var wrapper = document . getElementById ( 'viewerContainer' ) ;
if ( document . documentElement . requestFullScreen ) {
wrapper . requestFullScreen ( ) ;
} else if ( document . documentElement . mozRequestFullScreen ) {
wrapper . mozRequestFullScreen ( ) ;
} else if ( document . documentElement . webkitRequestFullScreen ) {
wrapper . webkitRequestFullScreen ( Element . ALLOW _KEYBOARD _INPUT ) ;
} else {
return false ;
}
this . isFullscreen = true ;
var currentPage = this . pages [ this . page - 1 ] ;
this . previousScale = this . currentScaleValue ;
this . parseScale ( 'page-fit' , true ) ;
// Wait for fullscreen to take effect
setTimeout ( function ( ) {
currentPage . scrollIntoView ( ) ;
} , 0 ) ;
return true ;
} ,
exitFullscreen : function pdfViewExitFullscreen ( ) {
this . isFullscreen = false ;
this . parseScale ( this . previousScale ) ;
this . page = this . page ;
}
}
} ;
} ;
@ -1785,6 +1849,10 @@ window.addEventListener('load', function webViewerLoad(evt) {
document . getElementById ( 'print' ) . classList . add ( 'hidden' ) ;
document . getElementById ( 'print' ) . classList . add ( 'hidden' ) ;
}
}
if ( ! PDFView . supportsFullscreen ) {
document . getElementById ( 'fullscreen' ) . classList . add ( 'hidden' ) ;
}
// Listen for warnings to trigger the fallback UI. Errors should be caught
// Listen for warnings to trigger the fallback UI. Errors should be caught
// and call PDFView.error() so we don't need to listen for those.
// and call PDFView.error() so we don't need to listen for those.
PDFJS . LogManager . addLogger ( {
PDFJS . LogManager . addLogger ( {
@ -1823,11 +1891,14 @@ function updateViewarea() {
PDFView . renderHighestPriority ( ) ;
PDFView . renderHighestPriority ( ) ;
updateViewarea . inProgress = true ; // used in "set page"
var currentId = PDFView . page ;
var currentId = PDFView . page ;
var firstPage = visiblePages [ 0 ] ;
var firstPage = visiblePages [ 0 ] ;
PDFView . page = firstPage . id ;
updateViewarea . inProgress = false ;
if ( ! PDFView . isFullscreen ) {
updateViewarea . inProgress = true ; // used in "set page"
PDFView . page = firstPage . id ;
updateViewarea . inProgress = false ;
}
var currentScale = PDFView . currentScale ;
var currentScale = PDFView . currentScale ;
var currentScaleValue = PDFView . currentScaleValue ;
var currentScaleValue = PDFView . currentScaleValue ;
@ -2013,7 +2084,7 @@ window.addEventListener('keydown', function keydown(evt) {
return ;
return ;
var controlsElement = document . getElementById ( 'controls' ) ;
var controlsElement = document . getElementById ( 'controls' ) ;
while ( curElement ) {
while ( curElement ) {
if ( curElement === controlsElement )
if ( curElement === controlsElement && ! PDFView . isFullscreen )
return ; // ignoring if the 'controls' element is focused
return ; // ignoring if the 'controls' element is focused
curElement = curElement . parentNode ;
curElement = curElement . parentNode ;
}
}
@ -2032,6 +2103,13 @@ window.addEventListener('keydown', function keydown(evt) {
PDFView . page ++ ;
PDFView . page ++ ;
handled = true ;
handled = true ;
break ;
break ;
case 32 : // spacebar
if ( PDFView . isFullscreen ) {
PDFView . page ++ ;
handled = true ;
}
break ;
}
}
}
}
@ -2047,3 +2125,18 @@ window.addEventListener('beforeprint', function beforePrint(evt) {
window . addEventListener ( 'afterprint' , function afterPrint ( evt ) {
window . addEventListener ( 'afterprint' , function afterPrint ( evt ) {
PDFView . afterPrint ( ) ;
PDFView . afterPrint ( ) ;
} ) ;
} ) ;
( function fullscreenClosure ( ) {
function fullscreenChange ( e ) {
var isFullscreen = document . fullscreen || document . mozFullScreen ||
document . webkitIsFullScreen ;
if ( ! isFullscreen ) {
PDFView . exitFullscreen ( ) ;
}
}
window . addEventListener ( 'fullscreenchange' , fullscreenChange , false ) ;
window . addEventListener ( 'mozfullscreenchange' , fullscreenChange , false ) ;
window . addEventListener ( 'webkitfullscreenchange' , fullscreenChange , false ) ;
} ) ( ) ;