diff --git a/web/pdf_find_bar.js b/web/pdf_find_bar.js index 0ab0382ea..b187fd8cd 100644 --- a/web/pdf_find_bar.js +++ b/web/pdf_find_bar.js @@ -95,7 +95,8 @@ var PDFFindBar = (function PDFFindBarClosure() { return window.dispatchEvent(event); }, - updateUIState: function PDFFindBar_updateUIState(state, previous) { + updateUIState: + function PDFFindBar_updateUIState(state, previous, matchCount) { var notFound = false; var findMsg = ''; var status = ''; @@ -132,36 +133,28 @@ var PDFFindBar = (function PDFFindBarClosure() { this.findField.setAttribute('data-status', status); this.findMsg.textContent = findMsg; + + this.updateResultsCount(matchCount); }, - updateResultsCount: function(matches) { - if (!matches) { - return this.hideResultsCount(); - } - - // Loop through and add up all the matches between pages - var matchCounter = 0; - - for (var i = 0, len = matches.length; i < len; i++) { - matchCounter += matches[i].length; + updateResultsCount: function(matchCount) { + if (!this.findResultsCount) { + return; // no UI control is provided } // If there are no matches, hide the counter - if (!matchCounter) { - return this.hideResultsCount(); + if (!matchCount) { + this.findResultsCount.classList.add('hidden'); + return; } // Create the match counter - this.findResultsCount.textContent = matchCounter; + this.findResultsCount.textContent = matchCount.toLocaleString(); // Show the counter this.findResultsCount.classList.remove('hidden'); }, - hideResultsCount: function() { - this.findResultsCount.classList.add('hidden'); - }, - open: function PDFFindBar_open() { if (!this.opened) { this.opened = true; diff --git a/web/pdf_find_controller.js b/web/pdf_find_controller.js index afac06bd4..9d30067bb 100644 --- a/web/pdf_find_controller.js +++ b/web/pdf_find_controller.js @@ -39,6 +39,7 @@ var PDFFindController = (function PDFFindControllerClosure() { this.active = false; // If active, find results will be highlighted. this.pageContents = []; // Stores the text for each page. this.pageMatches = []; + this.matchCount = 0; this.selected = { // Currently selected match. pageIdx: -1, matchIdx: -1 @@ -117,8 +118,6 @@ var PDFFindController = (function PDFFindControllerClosure() { if (queryLen === 0) { // Do nothing: the matches should be wiped out already. - // Also, reset the result counter back to zero - this.findBar.updateResultsCount(); return; } @@ -144,7 +143,10 @@ var PDFFindController = (function PDFFindControllerClosure() { } // Update the matches count - this.findBar.updateResultsCount(this.pageMatches); + if (matches.length > 0) { + this.matchCount += matches.length; + this.updateUIResultsCount(); + } }, extractText: function PDFFindController_extractText() { @@ -236,6 +238,7 @@ var PDFFindController = (function PDFFindControllerClosure() { this.hadMatch = false; this.resumePageIdx = null; this.pageMatches = []; + this.matchCount = 0; var self = this; for (var i = 0; i < numPages; i++) { @@ -392,6 +395,15 @@ var PDFFindController = (function PDFFindControllerClosure() { } }, + updateUIResultsCount: + function PDFFindController_updateUIResultsCount() { + if (this.findBar === null) { + throw new Error('PDFFindController is not initialized with a ' + + 'PDFFindBar instance.'); + } + this.findBar.updateResultsCount(this.matchCount); + }, + updateUIState: function PDFFindController_updateUIState(state, previous) { if (this.integratedFind) { FirefoxCom.request('updateFindControlState', @@ -402,7 +414,7 @@ var PDFFindController = (function PDFFindControllerClosure() { throw new Error('PDFFindController is not initialized with a ' + 'PDFFindBar instance.'); } - this.findBar.updateUIState(state, previous); + this.findBar.updateUIState(state, previous, this.matchCount); } }; return PDFFindController;