2ed3591b22
*This patch is based on something that I noticed while working on PR 10126.* The recent re-factoring of `PDFFindController` brought many improvements, among those the fact that access to `BaseViewer` is no longer required. However, with these changes there's one thing which now strikes me as not particularly user-friendly[1]: The fact that in order for searching to actually work, `PDFFindController.setDocument` must be called *and* a 'pagesinit' event must be dispatched (from somewhere). For all other viewer components, calling the `setDocument` method[2] is enough in order for the component to actually be usable. The `PDFFindController` thus stands out quite a bit, and it also becomes difficult to work with in any sort of custom implementation. For example: Imagine someone trying to use `PDFFindController` separately from the viewer[3], which *should* now be relatively simple given the re-factoring, and thus having to (somehow) figure out that they'll also need to manually dispatch a 'pagesinit' event for searching to work. Note that the above even affects the unit-tests, where an out-of-place 'pagesinit' event is being used. To attempt to address these problems, I'm thus suggesting that *only* `setDocument` should be used to indicate that searching may start. For the default viewer and/or the viewer components, `BaseViewer.setDocument` will now call `PDFFindController.setDocument` when the document is ready, thus requiring no outside configuration anymore[4]. For custom implementation, and the unit-tests, it's now as simple as just calling `PDFFindController.setDocument` to allow searching to start. --- [1] I should have caught this during review of PR 10099, but unfortunately it's sometimes not until you actually work with the code in question that things like these become clear. [2] Assuming, obviously, that the viewer component in question actually implements such a method :-) [3] There's even a very recent issue, filed by someone trying to do just that. [4] Short of providing a `PDFFindController` instance when creating a `BaseViewer` instance, of course.
74 lines
2.3 KiB
JavaScript
74 lines
2.3 KiB
JavaScript
/* Copyright 2014 Mozilla Foundation
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
'use strict';
|
|
|
|
if (!pdfjsLib.getDocument || !pdfjsViewer.PDFSinglePageViewer) {
|
|
alert('Please build the pdfjs-dist library using\n' +
|
|
' `gulp dist-install`');
|
|
}
|
|
|
|
// The workerSrc property shall be specified.
|
|
//
|
|
pdfjsLib.GlobalWorkerOptions.workerSrc =
|
|
'../../node_modules/pdfjs-dist/build/pdf.worker.js';
|
|
|
|
// Some PDFs need external cmaps.
|
|
//
|
|
var CMAP_URL = '../../node_modules/pdfjs-dist/cmaps/';
|
|
var CMAP_PACKED = true;
|
|
|
|
var DEFAULT_URL = '../../web/compressed.tracemonkey-pldi-09.pdf';
|
|
var SEARCH_FOR = ''; // try 'Mozilla';
|
|
|
|
var container = document.getElementById('viewerContainer');
|
|
|
|
// (Optionally) enable hyperlinks within PDF files.
|
|
var pdfLinkService = new pdfjsViewer.PDFLinkService();
|
|
|
|
// (Optionally) enable find controller.
|
|
var pdfFindController = new pdfjsViewer.PDFFindController({
|
|
linkService: pdfLinkService,
|
|
});
|
|
|
|
var pdfSinglePageViewer = new pdfjsViewer.PDFSinglePageViewer({
|
|
container: container,
|
|
linkService: pdfLinkService,
|
|
findController: pdfFindController,
|
|
});
|
|
pdfLinkService.setViewer(pdfSinglePageViewer);
|
|
|
|
container.addEventListener('pagesinit', function () {
|
|
// We can use pdfSinglePageViewer now, e.g. let's change default scale.
|
|
pdfSinglePageViewer.currentScaleValue = 'page-width';
|
|
|
|
if (SEARCH_FOR) { // We can try search for things
|
|
pdfFindController.executeCommand('find', { query: SEARCH_FOR, });
|
|
}
|
|
});
|
|
|
|
// Loading document.
|
|
pdfjsLib.getDocument({
|
|
url: DEFAULT_URL,
|
|
cMapUrl: CMAP_URL,
|
|
cMapPacked: CMAP_PACKED,
|
|
}).then(function(pdfDocument) {
|
|
// Document loaded, specifying document for the viewer and
|
|
// the (optional) linkService.
|
|
pdfSinglePageViewer.setDocument(pdfDocument);
|
|
|
|
pdfLinkService.setDocument(pdfDocument, null);
|
|
});
|