Merge pull request #10128 from Snuffleupagus/find-controller-enable

Make `PDFFindController` less confusing to use, by allowing searching to start when `setDocument` is called
This commit is contained in:
Tim van der Meij 2018-10-04 23:12:50 +02:00 committed by GitHub
commit 5da53ee98f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 14 additions and 21 deletions

View File

@ -70,5 +70,4 @@ pdfjsLib.getDocument({
pdfViewer.setDocument(pdfDocument);
pdfLinkService.setDocument(pdfDocument, null);
pdfFindController.setDocument(pdfDocument);
});

View File

@ -70,5 +70,4 @@ pdfjsLib.getDocument({
pdfSinglePageViewer.setDocument(pdfDocument);
pdfLinkService.setDocument(pdfDocument, null);
pdfFindController.setDocument(pdfDocument);
});

View File

@ -51,18 +51,17 @@ describe('pdf_find_controller', function() {
beforeEach(function(done) {
const loadingTask = getDocument(buildGetDocumentParams('tracemonkey.pdf'));
loadingTask.promise.then(function(pdfDocument) {
eventBus = new EventBus();
const linkService = new MockLinkService();
linkService.setDocument(pdfDocument);
eventBus = new EventBus();
pdfFindController = new PDFFindController({
linkService,
eventBus,
});
pdfFindController.setDocument(pdfDocument);
pdfFindController.setDocument(pdfDocument); // Enable searching.
eventBus.dispatch('pagesinit');
done();
});
});

View File

@ -569,7 +569,6 @@ let PDFViewerApplication = {
if (this.pdfDocument) {
this.pdfDocument = null;
this.findController.setDocument(null);
this.pdfThumbnailViewer.setDocument(null);
this.pdfViewer.setDocument(null);
this.pdfLinkService.setDocument(null);
@ -893,7 +892,6 @@ let PDFViewerApplication = {
} else if (PDFJSDev.test('CHROME')) {
baseDocumentUrl = location.href.split('#')[0];
}
this.findController.setDocument(pdfDocument);
this.pdfLinkService.setDocument(pdfDocument, baseDocumentUrl);
this.pdfDocumentProperties.setDocument(pdfDocument, this.url);

View File

@ -363,6 +363,10 @@ class BaseViewer {
if (this.pdfDocument) {
this._cancelRendering();
this._resetView();
if (this.findController) {
this.findController.setDocument(null);
}
}
this.pdfDocument = pdfDocument;
@ -471,6 +475,9 @@ class BaseViewer {
this.eventBus.dispatch('pagesinit', { source: this, });
if (this.findController) {
this.findController.setDocument(pdfDocument); // Enable searching.
}
if (this.defaultRenderingQueue) {
this.update();
}

View File

@ -99,6 +99,7 @@ class PDFFindController {
return;
}
this._pdfDocument = pdfDocument;
this._firstPageCapability.resolve();
}
executeCommand(cmd, state) {
@ -110,7 +111,7 @@ class PDFFindController {
this._state = state;
this._updateUIState(FindState.PENDING);
this._firstPagePromise.then(() => {
this._firstPageCapability.promise.then(() => {
if (!this._pdfDocument ||
(pdfDocument && this._pdfDocument !== pdfDocument)) {
// If the document was closed before searching began, or if the search
@ -160,17 +161,7 @@ class PDFFindController {
clearTimeout(this._findTimeout);
this._findTimeout = null;
this._firstPagePromise = new Promise((resolve) => {
const onPagesInit = () => {
if (!this._pdfDocument) {
throw new Error(
'PDFFindController: `setDocument()` should have been called.');
}
this._eventBus.off('pagesinit', onPagesInit);
resolve();
};
this._eventBus.on('pagesinit', onPagesInit);
});
this._firstPageCapability = createPromiseCapability();
}
_normalize(text) {
@ -553,7 +544,7 @@ class PDFFindController {
// Since searching is asynchronous, ensure that the removal of highlighted
// matches (from the UI) is async too such that the 'updatetextlayermatches'
// events will always be dispatched in the expected order.
this._firstPagePromise.then(() => {
this._firstPageCapability.promise.then(() => {
if (!this._pdfDocument ||
(pdfDocument && this._pdfDocument !== pdfDocument)) {
// Only update the UI if the document is open, and is the current one.