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:
commit
5da53ee98f
@ -70,5 +70,4 @@ pdfjsLib.getDocument({
|
|||||||
pdfViewer.setDocument(pdfDocument);
|
pdfViewer.setDocument(pdfDocument);
|
||||||
|
|
||||||
pdfLinkService.setDocument(pdfDocument, null);
|
pdfLinkService.setDocument(pdfDocument, null);
|
||||||
pdfFindController.setDocument(pdfDocument);
|
|
||||||
});
|
});
|
||||||
|
@ -70,5 +70,4 @@ pdfjsLib.getDocument({
|
|||||||
pdfSinglePageViewer.setDocument(pdfDocument);
|
pdfSinglePageViewer.setDocument(pdfDocument);
|
||||||
|
|
||||||
pdfLinkService.setDocument(pdfDocument, null);
|
pdfLinkService.setDocument(pdfDocument, null);
|
||||||
pdfFindController.setDocument(pdfDocument);
|
|
||||||
});
|
});
|
||||||
|
@ -51,18 +51,17 @@ describe('pdf_find_controller', function() {
|
|||||||
beforeEach(function(done) {
|
beforeEach(function(done) {
|
||||||
const loadingTask = getDocument(buildGetDocumentParams('tracemonkey.pdf'));
|
const loadingTask = getDocument(buildGetDocumentParams('tracemonkey.pdf'));
|
||||||
loadingTask.promise.then(function(pdfDocument) {
|
loadingTask.promise.then(function(pdfDocument) {
|
||||||
|
eventBus = new EventBus();
|
||||||
|
|
||||||
const linkService = new MockLinkService();
|
const linkService = new MockLinkService();
|
||||||
linkService.setDocument(pdfDocument);
|
linkService.setDocument(pdfDocument);
|
||||||
|
|
||||||
eventBus = new EventBus();
|
|
||||||
|
|
||||||
pdfFindController = new PDFFindController({
|
pdfFindController = new PDFFindController({
|
||||||
linkService,
|
linkService,
|
||||||
eventBus,
|
eventBus,
|
||||||
});
|
});
|
||||||
pdfFindController.setDocument(pdfDocument);
|
pdfFindController.setDocument(pdfDocument); // Enable searching.
|
||||||
|
|
||||||
eventBus.dispatch('pagesinit');
|
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -569,7 +569,6 @@ let PDFViewerApplication = {
|
|||||||
if (this.pdfDocument) {
|
if (this.pdfDocument) {
|
||||||
this.pdfDocument = null;
|
this.pdfDocument = null;
|
||||||
|
|
||||||
this.findController.setDocument(null);
|
|
||||||
this.pdfThumbnailViewer.setDocument(null);
|
this.pdfThumbnailViewer.setDocument(null);
|
||||||
this.pdfViewer.setDocument(null);
|
this.pdfViewer.setDocument(null);
|
||||||
this.pdfLinkService.setDocument(null);
|
this.pdfLinkService.setDocument(null);
|
||||||
@ -893,7 +892,6 @@ let PDFViewerApplication = {
|
|||||||
} else if (PDFJSDev.test('CHROME')) {
|
} else if (PDFJSDev.test('CHROME')) {
|
||||||
baseDocumentUrl = location.href.split('#')[0];
|
baseDocumentUrl = location.href.split('#')[0];
|
||||||
}
|
}
|
||||||
this.findController.setDocument(pdfDocument);
|
|
||||||
this.pdfLinkService.setDocument(pdfDocument, baseDocumentUrl);
|
this.pdfLinkService.setDocument(pdfDocument, baseDocumentUrl);
|
||||||
this.pdfDocumentProperties.setDocument(pdfDocument, this.url);
|
this.pdfDocumentProperties.setDocument(pdfDocument, this.url);
|
||||||
|
|
||||||
|
@ -363,6 +363,10 @@ class BaseViewer {
|
|||||||
if (this.pdfDocument) {
|
if (this.pdfDocument) {
|
||||||
this._cancelRendering();
|
this._cancelRendering();
|
||||||
this._resetView();
|
this._resetView();
|
||||||
|
|
||||||
|
if (this.findController) {
|
||||||
|
this.findController.setDocument(null);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this.pdfDocument = pdfDocument;
|
this.pdfDocument = pdfDocument;
|
||||||
@ -471,6 +475,9 @@ class BaseViewer {
|
|||||||
|
|
||||||
this.eventBus.dispatch('pagesinit', { source: this, });
|
this.eventBus.dispatch('pagesinit', { source: this, });
|
||||||
|
|
||||||
|
if (this.findController) {
|
||||||
|
this.findController.setDocument(pdfDocument); // Enable searching.
|
||||||
|
}
|
||||||
if (this.defaultRenderingQueue) {
|
if (this.defaultRenderingQueue) {
|
||||||
this.update();
|
this.update();
|
||||||
}
|
}
|
||||||
|
@ -99,6 +99,7 @@ class PDFFindController {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this._pdfDocument = pdfDocument;
|
this._pdfDocument = pdfDocument;
|
||||||
|
this._firstPageCapability.resolve();
|
||||||
}
|
}
|
||||||
|
|
||||||
executeCommand(cmd, state) {
|
executeCommand(cmd, state) {
|
||||||
@ -110,7 +111,7 @@ class PDFFindController {
|
|||||||
this._state = state;
|
this._state = state;
|
||||||
this._updateUIState(FindState.PENDING);
|
this._updateUIState(FindState.PENDING);
|
||||||
|
|
||||||
this._firstPagePromise.then(() => {
|
this._firstPageCapability.promise.then(() => {
|
||||||
if (!this._pdfDocument ||
|
if (!this._pdfDocument ||
|
||||||
(pdfDocument && this._pdfDocument !== pdfDocument)) {
|
(pdfDocument && this._pdfDocument !== pdfDocument)) {
|
||||||
// If the document was closed before searching began, or if the search
|
// If the document was closed before searching began, or if the search
|
||||||
@ -160,17 +161,7 @@ class PDFFindController {
|
|||||||
clearTimeout(this._findTimeout);
|
clearTimeout(this._findTimeout);
|
||||||
this._findTimeout = null;
|
this._findTimeout = null;
|
||||||
|
|
||||||
this._firstPagePromise = new Promise((resolve) => {
|
this._firstPageCapability = createPromiseCapability();
|
||||||
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);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_normalize(text) {
|
_normalize(text) {
|
||||||
@ -553,7 +544,7 @@ class PDFFindController {
|
|||||||
// Since searching is asynchronous, ensure that the removal of highlighted
|
// Since searching is asynchronous, ensure that the removal of highlighted
|
||||||
// matches (from the UI) is async too such that the 'updatetextlayermatches'
|
// matches (from the UI) is async too such that the 'updatetextlayermatches'
|
||||||
// events will always be dispatched in the expected order.
|
// events will always be dispatched in the expected order.
|
||||||
this._firstPagePromise.then(() => {
|
this._firstPageCapability.promise.then(() => {
|
||||||
if (!this._pdfDocument ||
|
if (!this._pdfDocument ||
|
||||||
(pdfDocument && this._pdfDocument !== pdfDocument)) {
|
(pdfDocument && this._pdfDocument !== pdfDocument)) {
|
||||||
// Only update the UI if the document is open, and is the current one.
|
// Only update the UI if the document is open, and is the current one.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user