diff --git a/web/pdf_find_bar.js b/web/pdf_find_bar.js index 7fddd5d8f..ffcbef719 100644 --- a/web/pdf_find_bar.js +++ b/web/pdf_find_bar.js @@ -83,6 +83,10 @@ var PDFFindBar = (function PDFFindBarClosure() { } PDFFindBar.prototype = { + reset: function PDFFindBar_reset() { + this.updateUIState(); + }, + dispatchEvent: function PDFFindBar_dispatchEvent(type, findPrev) { var event = document.createEvent('CustomEvent'); event.initCustomEvent('find' + type, true, true, { diff --git a/web/pdf_find_controller.js b/web/pdf_find_controller.js index 29d45706f..407cc1651 100644 --- a/web/pdf_find_controller.js +++ b/web/pdf_find_controller.js @@ -26,51 +26,34 @@ var FindStates = { var FIND_SCROLL_OFFSET_TOP = -50; var FIND_SCROLL_OFFSET_LEFT = -400; +var CHARACTERS_TO_NORMALIZE = { + '\u2018': '\'', // Left single quotation mark + '\u2019': '\'', // Right single quotation mark + '\u201A': '\'', // Single low-9 quotation mark + '\u201B': '\'', // Single high-reversed-9 quotation mark + '\u201C': '"', // Left double quotation mark + '\u201D': '"', // Right double quotation mark + '\u201E': '"', // Double low-9 quotation mark + '\u201F': '"', // Double high-reversed-9 quotation mark + '\u00BC': '1/4', // Vulgar fraction one quarter + '\u00BD': '1/2', // Vulgar fraction one half + '\u00BE': '3/4', // Vulgar fraction three quarters +}; + /** * Provides "search" or "find" functionality for the PDF. * This object actually performs the search for a given string. */ var PDFFindController = (function PDFFindControllerClosure() { function PDFFindController(options) { - this.startedTextExtraction = false; - this.extractTextPromises = []; - this.pendingFindMatches = Object.create(null); - 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 - }; - this.offset = { // Where the find algorithm currently is in the document. - pageIdx: null, - matchIdx: null - }; - this.pagesToSearch = null; - this.resumePageIdx = null; - this.state = null; - this.dirtyMatch = false; - this.findTimeout = null; this.pdfViewer = options.pdfViewer || null; this.integratedFind = options.integratedFind || false; - this.charactersToNormalize = { - '\u2018': '\'', // Left single quotation mark - '\u2019': '\'', // Right single quotation mark - '\u201A': '\'', // Single low-9 quotation mark - '\u201B': '\'', // Single high-reversed-9 quotation mark - '\u201C': '"', // Left double quotation mark - '\u201D': '"', // Right double quotation mark - '\u201E': '"', // Double low-9 quotation mark - '\u201F': '"', // Double high-reversed-9 quotation mark - '\u00BC': '1/4', // Vulgar fraction one quarter - '\u00BD': '1/2', // Vulgar fraction one half - '\u00BE': '3/4', // Vulgar fraction three quarters - }; this.findBar = options.findBar || null; - // Compile the regular expression for text normalization once - var replace = Object.keys(this.charactersToNormalize).join(''); + this.reset(); + + // Compile the regular expression for text normalization once. + var replace = Object.keys(CHARACTERS_TO_NORMALIZE).join(''); this.normalizationRegex = new RegExp('[' + replace + ']', 'g'); var events = [ @@ -79,10 +62,6 @@ var PDFFindController = (function PDFFindControllerClosure() { 'findhighlightallchange', 'findcasesensitivitychange' ]; - - this.firstPagePromise = new Promise(function (resolve) { - this.resolveFirstPage = resolve; - }.bind(this)); this.handleEvent = this.handleEvent.bind(this); for (var i = 0, len = events.length; i < len; i++) { @@ -98,13 +77,33 @@ var PDFFindController = (function PDFFindControllerClosure() { reset: function PDFFindController_reset() { this.startedTextExtraction = false; this.extractTextPromises = []; - this.active = false; + this.pendingFindMatches = Object.create(null); + 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 + }; + this.offset = { // Where the find algorithm currently is in the document. + pageIdx: null, + matchIdx: null + }; + this.pagesToSearch = null; + this.resumePageIdx = null; + this.state = null; + this.dirtyMatch = false; + this.findTimeout = null; + + this.firstPagePromise = new Promise(function (resolve) { + this.resolveFirstPage = resolve; + }.bind(this)); }, normalize: function PDFFindController_normalize(text) { - var self = this; return text.replace(this.normalizationRegex, function (ch) { - return self.charactersToNormalize[ch]; + return CHARACTERS_TO_NORMALIZE[ch]; }); }, diff --git a/web/viewer.js b/web/viewer.js index 764c0af09..f2567fcae 100644 --- a/web/viewer.js +++ b/web/viewer.js @@ -526,6 +526,9 @@ var PDFViewerApplication = { this.pdfLinkService.setDocument(null, null); } + this.findController.reset(); + this.findBar.reset(); + if (typeof PDFBug !== 'undefined') { PDFBug.cleanup(); } @@ -804,8 +807,6 @@ var PDFViewerApplication = { var self = this; scale = scale || UNKNOWN_SCALE; - this.findController.reset(); - this.pdfDocument = pdfDocument; this.pdfDocumentProperties.setDocumentAndUrl(pdfDocument, this.url);