diff --git a/web/app.js b/web/app.js index 4a68d99cb..7c17651e3 100644 --- a/web/app.js +++ b/web/app.js @@ -832,11 +832,9 @@ var PDFViewerApplication = { self.loadingBar.hide(); }); - var pagesCount = pdfDocument.numPages; - var toolbarConfig = this.appConfig.toolbar; - toolbarConfig.numPages.textContent = - mozL10n.get('page_of', {pageCount: pagesCount}, 'of {{pageCount}}'); - toolbarConfig.pageNumber.max = pagesCount; + this._updateUIToolbar({ + resetNumPages: true, + }); var id = this.documentFingerprint = pdfDocument.fingerprint; var store = this.store = new ViewHistory(id); @@ -1049,10 +1047,6 @@ var PDFViewerApplication = { this.isInitialViewSet = true; - // When opening a new file, when one is already loaded in the viewer, - // ensure that the 'pageNumber' element displays the correct value. - this.appConfig.toolbar.pageNumber.value = this.pdfViewer.currentPageNumber; - this.pdfSidebar.setInitialView(this.preferenceSidebarViewOnLoad || (sidebarView | 0)); @@ -1223,6 +1217,67 @@ var PDFViewerApplication = { this.pdfPresentationMode.mouseScroll(delta); }, + /** + * @typedef UpdateUIToolbarParameters + * @property {number} pageNumber + * @property {string} scaleValue + * @property {scale} scale + * @property {boolean} resetNumPages + */ + + /** + * @param {Object} UpdateUIToolbarParameters + * @private + */ + _updateUIToolbar: function (params) { + function selectScaleOption(value, scale) { + var options = toolbarConfig.scaleSelect.options; + var predefinedValueFound = false; + for (var i = 0, ii = options.length; i < ii; i++) { + var option = options[i]; + if (option.value !== value) { + option.selected = false; + continue; + } + option.selected = true; + predefinedValueFound = true; + } + if (!predefinedValueFound) { + var customScale = Math.round(scale * 10000) / 100; + toolbarConfig.customScaleOption.textContent = + mozL10n.get('page_scale_percent', {scale: customScale}, '{{scale}}%'); + toolbarConfig.customScaleOption.selected = true; + } + } + + var pageNumber = params.pageNumber || this.pdfViewer.currentPageNumber; + var scaleValue = (params.scaleValue || params.scale || + this.pdfViewer.currentScaleValue || DEFAULT_SCALE_VALUE).toString(); + var scale = params.scale || this.pdfViewer.currentScale; + var resetNumPages = params.resetNumPages || false; + + var toolbarConfig = this.appConfig.toolbar; + var pagesCount = this.pagesCount; + + if (resetNumPages) { + toolbarConfig.numPages.textContent = + mozL10n.get('page_of', { pageCount: pagesCount }, 'of {{pageCount}}'); + toolbarConfig.pageNumber.max = pagesCount; + } + toolbarConfig.pageNumber.value = pageNumber; + + toolbarConfig.previous.disabled = (pageNumber <= 1); + toolbarConfig.next.disabled = (pageNumber >= pagesCount); + + toolbarConfig.firstPage.disabled = (pageNumber <= 1); + toolbarConfig.lastPage.disabled = (pageNumber >= pagesCount); + + toolbarConfig.zoomOut.disabled = (scale === MIN_SCALE); + toolbarConfig.zoomIn.disabled = (scale === MAX_SCALE); + + selectScaleOption(scaleValue, scale); + }, + bindEvents: function pdfViewBindEvents() { var eventBus = this.eventBus; @@ -1824,21 +1879,6 @@ function webViewerFileInputChange(e) { } //#endif -function selectScaleOption(value) { - var options = PDFViewerApplication.appConfig.toolbar.scaleSelect.options; - var predefinedValueFound = false; - for (var i = 0, ii = options.length; i < ii; i++) { - var option = options[i]; - if (option.value !== value) { - option.selected = false; - continue; - } - option.selected = true; - predefinedValueFound = true; - } - return predefinedValueFound; -} - window.addEventListener('localized', function localized(evt) { PDFViewerApplication.eventBus.dispatch('localized'); }); @@ -1924,20 +1964,11 @@ function webViewerFindFromUrlHash(e) { } function webViewerScaleChanging(e) { - var appConfig = PDFViewerApplication.appConfig; - appConfig.toolbar.zoomOut.disabled = (e.scale === MIN_SCALE); - appConfig.toolbar.zoomIn.disabled = (e.scale === MAX_SCALE); + PDFViewerApplication._updateUIToolbar({ + scaleValue: e.presetValue, + scale: e.scale, + }); - // Update the 'scaleSelect' DOM element. - var predefinedValueFound = selectScaleOption(e.presetValue || - '' + e.scale); - if (!predefinedValueFound) { - var customScaleOption = appConfig.toolbar.customScaleOption; - var customScale = Math.round(e.scale * 10000) / 100; - customScaleOption.textContent = - mozL10n.get('page_scale_percent', { scale: customScale }, '{{scale}}%'); - customScaleOption.selected = true; - } if (!PDFViewerApplication.initialized) { return; } @@ -1946,20 +1977,14 @@ function webViewerScaleChanging(e) { function webViewerPageChanging(e) { var page = e.pageNumber; - if (e.previousPageNumber !== page) { - PDFViewerApplication.appConfig.toolbar.pageNumber.value = page; - if (PDFViewerApplication.pdfSidebar.isThumbnailViewVisible) { - PDFViewerApplication.pdfThumbnailViewer.scrollThumbnailIntoView(page); - } + PDFViewerApplication._updateUIToolbar({ + pageNumber: page, + }); + if (e.previousPageNumber !== page && + PDFViewerApplication.pdfSidebar.isThumbnailViewVisible) { + PDFViewerApplication.pdfThumbnailViewer.scrollThumbnailIntoView(page); } - var numPages = PDFViewerApplication.pagesCount; - - PDFViewerApplication.appConfig.toolbar.previous.disabled = (page <= 1); - PDFViewerApplication.appConfig.toolbar.next.disabled = (page >= numPages); - - PDFViewerApplication.appConfig.toolbar.firstPage.disabled = (page <= 1); - PDFViewerApplication.appConfig.toolbar.lastPage.disabled = (page >= numPages); // we need to update stats if (pdfjsLib.PDFJS.pdfBug && Stats.enabled) { diff --git a/web/pdf_viewer.js b/web/pdf_viewer.js index d60d13cfb..7fa5f654d 100644 --- a/web/pdf_viewer.js +++ b/web/pdf_viewer.js @@ -231,7 +231,7 @@ var PDFViewer = (function pdfViewer() { set currentScaleValue(val) { if (!this.pdfDocument) { this._currentScale = isNaN(val) ? UNKNOWN_SCALE : val; - this._currentScaleValue = val; + this._currentScaleValue = val.toString(); return; } this._setScale(val, false); @@ -418,7 +418,7 @@ var PDFViewer = (function pdfViewer() { _setScaleUpdatePages: function pdfViewer_setScaleUpdatePages( newScale, newValue, noScroll, preset) { - this._currentScaleValue = newValue; + this._currentScaleValue = newValue.toString(); if (isSameScale(this._currentScale, newScale)) { if (preset) {