Fix how matches are found in search

Instead of keeping track of where the search starts, just
keep track of the number of pages and make sure we don't
visit pages more than once.
This commit is contained in:
Fil Zembowicz 2014-10-01 19:57:57 -04:00
parent fb6d87c77b
commit 4275481e08

View File

@ -44,6 +44,7 @@ var PDFFindController = (function PDFFindControllerClosure() {
pageIdx: null,
matchIdx: null
};
this.pagesToSearch = null;
this.resumePageIdx = null;
this.state = null;
this.dirtyMatch = false;
@ -255,6 +256,8 @@ var PDFFindController = (function PDFFindControllerClosure() {
}
var offset = this.offset;
// Keep track of how many pages we should maximally iterate through.
this.pagesToSearch = this.pdfViewer.pagesCount;
// If there's already a matchIdx that means we are iterating through a
// page's matches.
if (offset.matchIdx !== null) {
@ -293,8 +296,8 @@ var PDFFindController = (function PDFFindControllerClosure() {
this.advanceOffsetPage(previous);
if (offset.wrapped) {
offset.matchIdx = null;
if (!this.hadMatch) {
// No point in wrapping, there were no matches.
if (this.pagesToSearch < 0) {
// No point in wrapping again, there were no matches.
this.updateMatch(false);
// while matches were not found, searching for a page
// with matches should nevertheless halt.
@ -327,11 +330,12 @@ var PDFFindController = (function PDFFindControllerClosure() {
var numPages = this.extractTextPromises.length;
offset.pageIdx = (previous ? offset.pageIdx - 1 : offset.pageIdx + 1);
offset.matchIdx = null;
this.pagesToSearch--;
if (offset.pageIdx >= numPages || offset.pageIdx < 0) {
offset.pageIdx = (previous ? numPages - 1 : 0);
offset.wrapped = true;
return;
}
},