Log an error when the value passed to set currentPageNumber is out of bounds (PR 7502 followup)

With PR 7502 we no longer dispatch an event when the `val` is out of bounds, so to better communicate why nothing happens this patch logs an error in that case (similar to the logging of errors when trying to set an invalid scale).

The way that the default viewer is currently implemented, means that e.g. keyboard short-cuts could trigger the new error. Hence this patch also adds the necessary validation code, both to `app.js` and `pdf_link_service.js` to prevent unnecessary errors.
This commit is contained in:
Jonas Jenwald 2016-08-07 13:10:50 +02:00
parent ac7b675603
commit 7706cfa9fe
3 changed files with 46 additions and 37 deletions

View File

@ -396,15 +396,15 @@ var PDFViewerApplication = {
},
get pagesCount() {
return this.pdfDocument.numPages;
return this.pdfDocument ? this.pdfDocument.numPages : 0;
},
set page(val) {
this.pdfLinkService.page = val;
this.pdfViewer.currentPageNumber = val;
},
get page() { // TODO remove
return this.pdfLinkService.page;
get page() {
return this.pdfViewer.currentPageNumber;
},
get supportsPrinting() {
@ -1496,30 +1496,25 @@ function webViewerInitialized() {
}
}, true);
appConfig.sidebar.toggleButton.addEventListener('click',
function() {
PDFViewerApplication.pdfSidebar.toggle();
});
appConfig.sidebar.toggleButton.addEventListener('click', function() {
PDFViewerApplication.pdfSidebar.toggle();
});
appConfig.toolbar.previous.addEventListener('click',
function() {
PDFViewerApplication.page--;
});
appConfig.toolbar.previous.addEventListener('click', function() {
PDFViewerApplication.page--;
});
appConfig.toolbar.next.addEventListener('click',
function() {
PDFViewerApplication.page++;
});
appConfig.toolbar.next.addEventListener('click', function() {
PDFViewerApplication.page++;
});
appConfig.toolbar.zoomIn.addEventListener('click',
function() {
PDFViewerApplication.zoomIn();
});
appConfig.toolbar.zoomIn.addEventListener('click', function() {
PDFViewerApplication.zoomIn();
});
appConfig.toolbar.zoomOut.addEventListener('click',
function() {
PDFViewerApplication.zoomOut();
});
appConfig.toolbar.zoomOut.addEventListener('click', function() {
PDFViewerApplication.zoomOut();
});
appConfig.toolbar.pageNumber.addEventListener('click', function() {
this.select();
@ -2187,7 +2182,9 @@ window.addEventListener('keydown', function keydown(evt) {
/* falls through */
case 75: // 'k'
case 80: // 'p'
PDFViewerApplication.page--;
if (PDFViewerApplication.page > 1) {
PDFViewerApplication.page--;
}
handled = true;
break;
case 27: // esc key
@ -2217,7 +2214,9 @@ window.addEventListener('keydown', function keydown(evt) {
/* falls through */
case 74: // 'j'
case 78: // 'n'
PDFViewerApplication.page++;
if (PDFViewerApplication.page < PDFViewerApplication.pagesCount) {
PDFViewerApplication.page++;
}
handled = true;
break;
@ -2229,8 +2228,8 @@ window.addEventListener('keydown', function keydown(evt) {
}
break;
case 35: // end
if (isViewerInPresentationMode || (PDFViewerApplication.pdfDocument &&
PDFViewerApplication.page < PDFViewerApplication.pagesCount)) {
if (isViewerInPresentationMode ||
PDFViewerApplication.page < PDFViewerApplication.pagesCount) {
PDFViewerApplication.page = PDFViewerApplication.pagesCount;
handled = true;
ensureViewerFocused = true;
@ -2255,7 +2254,9 @@ window.addEventListener('keydown', function keydown(evt) {
pdfViewer.currentScaleValue !== 'page-fit') {
break;
}
PDFViewerApplication.page--;
if (PDFViewerApplication.page > 1) {
PDFViewerApplication.page--;
}
handled = true;
break;

View File

@ -80,7 +80,7 @@ var PDFLinkService = (function PDFLinkServiceClosure() {
* @returns {number}
*/
get pagesCount() {
return this.pdfDocument.numPages;
return this.pdfDocument ? this.pdfDocument.numPages : 0;
},
/**
@ -111,7 +111,9 @@ var PDFLinkService = (function PDFLinkServiceClosure() {
(destRef + 1);
if (pageNumber) {
if (pageNumber > self.pagesCount) {
pageNumber = self.pagesCount;
console.error('PDFLinkService_navigateTo: ' +
'Trying to navigate to a non-existent page.');
return;
}
self.pdfViewer.scrollPageIntoView(pageNumber, dest);
@ -288,11 +290,15 @@ var PDFLinkService = (function PDFLinkServiceClosure() {
break;
case 'NextPage':
this.page++;
if (this.page < this.pagesCount) {
this.page++;
}
break;
case 'PrevPage':
this.page--;
if (this.page > 1) {
this.page--;
}
break;
case 'LastPage':

View File

@ -181,7 +181,7 @@ var PDFViewer = (function pdfViewer() {
* @private
*/
_setCurrentPageNumber:
function pdfViewer_setCurrentPageNumber(val, resetCurrentPageView) {
function PDFViewer_setCurrentPageNumber(val, resetCurrentPageView) {
if (this._currentPageNumber === val) {
if (resetCurrentPageView) {
this._resetCurrentPageView();
@ -190,6 +190,8 @@ var PDFViewer = (function pdfViewer() {
}
if (!(0 < val && val <= this.pagesCount)) {
console.error('PDFViewer_setCurrentPageNumber: "' + val +
'" is out of bounds.');
return;
}
@ -467,7 +469,7 @@ var PDFViewer = (function pdfViewer() {
}
},
_setScale: function pdfViewer_setScale(value, noScroll) {
_setScale: function PDFViewer_setScale(value, noScroll) {
var scale = parseFloat(value);
if (scale > 0) {
@ -507,8 +509,8 @@ var PDFViewer = (function pdfViewer() {
scale = Math.min(MAX_AUTO_SCALE, horizontalScale);
break;
default:
console.error('pdfViewSetScale: \'' + value +
'\' is an unknown zoom value.');
console.error('PDFViewer_setScale: "' + value +
'" is an unknown zoom value.');
return;
}
this._setScaleUpdatePages(scale, value, noScroll, true);