diff --git a/examples/acroforms/acroforms.js b/examples/acroforms/acroforms.js index 75a0c8650..bcf4dae3f 100644 --- a/examples/acroforms/acroforms.js +++ b/examples/acroforms/acroforms.js @@ -23,6 +23,8 @@ var DEFAULT_SCALE = 1.0; var container = document.getElementById("pageContainer"); +var eventBus = new pdfjsViewer.EventBus(); + // Fetch the PDF document from the URL using promises. var loadingTask = pdfjsLib.getDocument(DEFAULT_URL); loadingTask.promise.then(function(doc) { @@ -39,6 +41,7 @@ loadingTask.promise.then(function(doc) { id: pageNum, scale: DEFAULT_SCALE, defaultViewport: pdfPage.getViewport({ scale: DEFAULT_SCALE }), + eventBus: eventBus, annotationLayerFactory: new pdfjsViewer.DefaultAnnotationLayerFactory(), renderInteractiveForms: true, }); diff --git a/examples/components/pageviewer.js b/examples/components/pageviewer.js index b6ed43ff9..fd8297990 100644 --- a/examples/components/pageviewer.js +++ b/examples/components/pageviewer.js @@ -35,6 +35,8 @@ var SCALE = 1.0; var container = document.getElementById("pageContainer"); +var eventBus = new pdfjsViewer.EventBus(); + // Loading document. var loadingTask = pdfjsLib.getDocument({ url: DEFAULT_URL, @@ -50,6 +52,7 @@ loadingTask.promise.then(function(pdfDocument) { id: PAGE_TO_VIEW, scale: SCALE, defaultViewport: pdfPage.getViewport({ scale: SCALE }), + eventBus: eventBus, // We can enable text/annotations layers, if needed textLayerFactory: new pdfjsViewer.DefaultTextLayerFactory(), annotationLayerFactory: new pdfjsViewer.DefaultAnnotationLayerFactory(), diff --git a/examples/components/simpleviewer.js b/examples/components/simpleviewer.js index d71820622..290a4f8cb 100644 --- a/examples/components/simpleviewer.js +++ b/examples/components/simpleviewer.js @@ -34,22 +34,28 @@ var SEARCH_FOR = ""; // try 'Mozilla'; var container = document.getElementById("viewerContainer"); +var eventBus = new pdfjsViewer.EventBus(); + // (Optionally) enable hyperlinks within PDF files. -var pdfLinkService = new pdfjsViewer.PDFLinkService(); +var pdfLinkService = new pdfjsViewer.PDFLinkService({ + eventBus: eventBus, +}); // (Optionally) enable find controller. var pdfFindController = new pdfjsViewer.PDFFindController({ + eventBus: eventBus, linkService: pdfLinkService, }); var pdfViewer = new pdfjsViewer.PDFViewer({ container: container, + eventBus: eventBus, linkService: pdfLinkService, findController: pdfFindController, }); pdfLinkService.setViewer(pdfViewer); -document.addEventListener("pagesinit", function() { +eventBus.on("pagesinit", function() { // We can use pdfViewer now, e.g. let's change default scale. pdfViewer.currentScaleValue = "page-width"; diff --git a/examples/components/singlepageviewer.js b/examples/components/singlepageviewer.js index 343052985..ff6460553 100644 --- a/examples/components/singlepageviewer.js +++ b/examples/components/singlepageviewer.js @@ -34,22 +34,28 @@ var SEARCH_FOR = ""; // try 'Mozilla'; var container = document.getElementById("viewerContainer"); +var eventBus = new pdfjsViewer.EventBus(); + // (Optionally) enable hyperlinks within PDF files. -var pdfLinkService = new pdfjsViewer.PDFLinkService(); +var pdfLinkService = new pdfjsViewer.PDFLinkService({ + eventBus: eventBus, +}); // (Optionally) enable find controller. var pdfFindController = new pdfjsViewer.PDFFindController({ + eventBus: eventBus, linkService: pdfLinkService, }); var pdfSinglePageViewer = new pdfjsViewer.PDFSinglePageViewer({ container: container, + eventBus: eventBus, linkService: pdfLinkService, findController: pdfFindController, }); pdfLinkService.setViewer(pdfSinglePageViewer); -document.addEventListener("pagesinit", function() { +eventBus.on("pagesinit", function() { // We can use pdfSinglePageViewer now, e.g. let's change default scale. pdfSinglePageViewer.currentScaleValue = "page-width"; diff --git a/examples/mobile-viewer/viewer.js b/examples/mobile-viewer/viewer.js index e875f72b8..befe718f6 100644 --- a/examples/mobile-viewer/viewer.js +++ b/examples/mobile-viewer/viewer.js @@ -40,6 +40,7 @@ var PDFViewerApplication = { pdfViewer: null, pdfHistory: null, pdfLinkService: null, + eventBus: null, /** * Opens PDF document specified by URL. @@ -340,7 +341,12 @@ var PDFViewerApplication = { }, initUI: function pdfViewInitUI() { - var linkService = new pdfjsViewer.PDFLinkService(); + var eventBus = new pdfjsViewer.EventBus(); + this.eventBus = eventBus; + + var linkService = new pdfjsViewer.PDFLinkService({ + eventBus: eventBus, + }); this.pdfLinkService = linkService; this.l10n = pdfjsViewer.NullL10n; @@ -348,6 +354,7 @@ var PDFViewerApplication = { var container = document.getElementById("viewerContainer"); var pdfViewer = new pdfjsViewer.PDFViewer({ container: container, + eventBus: eventBus, linkService: linkService, l10n: this.l10n, useOnlyCssZoom: USE_ONLY_CSS_ZOOM, @@ -357,6 +364,7 @@ var PDFViewerApplication = { linkService.setViewer(pdfViewer); this.pdfHistory = new pdfjsViewer.PDFHistory({ + eventBus: eventBus, linkService: linkService, }); linkService.setHistory(this.pdfHistory); @@ -394,15 +402,15 @@ var PDFViewerApplication = { } }); - document.addEventListener("pagesinit", function() { + eventBus.on("pagesinit", function() { // We can use pdfViewer now, e.g. let's change default scale. pdfViewer.currentScaleValue = DEFAULT_SCALE_VALUE; }); - document.addEventListener( + eventBus.on( "pagechanging", function(evt) { - var page = evt.detail.pageNumber; + var page = evt.pageNumber; var numPages = PDFViewerApplication.pagesCount; document.getElementById("pageNumber").value = page; diff --git a/examples/svgviewer/viewer.js b/examples/svgviewer/viewer.js index 03f837e45..b7dec1e28 100644 --- a/examples/svgviewer/viewer.js +++ b/examples/svgviewer/viewer.js @@ -33,18 +33,23 @@ var DEFAULT_URL = "../../web/compressed.tracemonkey-pldi-09.pdf"; var container = document.getElementById("viewerContainer"); +var eventBus = new pdfjsViewer.EventBus(); + // (Optionally) enable hyperlinks within PDF files. -var pdfLinkService = new pdfjsViewer.PDFLinkService(); +var pdfLinkService = new pdfjsViewer.PDFLinkService({ + eventBus: eventBus, +}); var pdfViewer = new pdfjsViewer.PDFViewer({ container: container, + eventBus: eventBus, linkService: pdfLinkService, renderer: "svg", textLayerMode: 0, }); pdfLinkService.setViewer(pdfViewer); -document.addEventListener("pagesinit", function() { +eventBus.on("pagesinit", function() { // We can use pdfViewer now, e.g. let's change default scale. pdfViewer.currentScaleValue = "page-width"; }); diff --git a/web/app.js b/web/app.js index 1610f6249..0441e8f21 100644 --- a/web/app.js +++ b/web/app.js @@ -18,7 +18,7 @@ import { animationStarted, AutoPrintRegExp, DEFAULT_SCALE_VALUE, - getGlobalEventBus, + EventBus, getPDFFileNameFromURL, isValidRotation, isValidScrollMode, @@ -343,7 +343,7 @@ const PDFViewerApplication = { const eventBus = appConfig.eventBus || - getGlobalEventBus(AppOptions.get("eventBusDispatchToDOM")); + new EventBus({ dispatchToDOM: AppOptions.get("eventBusDispatchToDOM") }); this.eventBus = eventBus; const pdfRenderingQueue = new PDFRenderingQueue(); diff --git a/web/base_viewer.js b/web/base_viewer.js index 78ab1fad9..77146eb9b 100644 --- a/web/base_viewer.js +++ b/web/base_viewer.js @@ -1088,17 +1088,20 @@ class BaseViewer { * @param {HTMLDivElement} textLayerDiv * @param {number} pageIndex * @param {PageViewport} viewport + * @param {boolean} enhanceTextSelection + * @param {EventBus} eventBus * @returns {TextLayerBuilder} */ createTextLayerBuilder( textLayerDiv, pageIndex, viewport, - enhanceTextSelection = false + enhanceTextSelection = false, + eventBus ) { return new TextLayerBuilder({ textLayerDiv, - eventBus: this.eventBus, + eventBus, pageIndex, viewport, findController: this.isInPresentationMode ? null : this.findController, diff --git a/web/interfaces.js b/web/interfaces.js index 6f38130c8..e254df5f5 100644 --- a/web/interfaces.js +++ b/web/interfaces.js @@ -146,13 +146,15 @@ class IPDFTextLayerFactory { * @param {number} pageIndex * @param {PageViewport} viewport * @param {boolean} enhanceTextSelection + * @param {EventBus} eventBus * @returns {TextLayerBuilder} */ createTextLayerBuilder( textLayerDiv, pageIndex, viewport, - enhanceTextSelection = false + enhanceTextSelection = false, + eventBus ) {} } diff --git a/web/pdf_find_bar.js b/web/pdf_find_bar.js index 00811b268..5ace2fc74 100644 --- a/web/pdf_find_bar.js +++ b/web/pdf_find_bar.js @@ -25,7 +25,7 @@ const MATCHES_COUNT_LIMIT = 1000; * is done by PDFFindController. */ class PDFFindBar { - constructor(options, eventBus = getGlobalEventBus(), l10n = NullL10n) { + constructor(options, eventBus, l10n = NullL10n) { this.opened = false; this.bar = options.bar || null; @@ -38,7 +38,7 @@ class PDFFindBar { this.findResultsCount = options.findResultsCount || null; this.findPreviousButton = options.findPreviousButton || null; this.findNextButton = options.findNextButton || null; - this.eventBus = eventBus; + this.eventBus = eventBus || getGlobalEventBus(); this.l10n = l10n; // Add event listeners to the DOM elements. diff --git a/web/pdf_find_controller.js b/web/pdf_find_controller.js index e92accdeb..53a560260 100644 --- a/web/pdf_find_controller.js +++ b/web/pdf_find_controller.js @@ -67,9 +67,9 @@ class PDFFindController { /** * @param {PDFFindControllerOptions} options */ - constructor({ linkService, eventBus = getGlobalEventBus() }) { + constructor({ linkService, eventBus }) { this._linkService = linkService; - this._eventBus = eventBus; + this._eventBus = eventBus || getGlobalEventBus(); this._reset(); eventBus.on("findbarclose", this._onFindBarClose.bind(this)); diff --git a/web/pdf_page_view.js b/web/pdf_page_view.js index 7dd696f93..b81456880 100644 --- a/web/pdf_page_view.js +++ b/web/pdf_page_view.js @@ -444,7 +444,8 @@ class PDFPageView { textLayerDiv, this.id - 1, this.viewport, - this.textLayerMode === TextLayerMode.ENABLE_ENHANCE + this.textLayerMode === TextLayerMode.ENABLE_ENHANCE, + this.eventBus ); } this.textLayer = textLayer; diff --git a/web/pdf_viewer.component.js b/web/pdf_viewer.component.js index 513efaaf5..a73d85fdb 100644 --- a/web/pdf_viewer.component.js +++ b/web/pdf_viewer.component.js @@ -21,12 +21,7 @@ import { DefaultTextLayerFactory, TextLayerBuilder, } from "./text_layer_builder.js"; -import { - EventBus, - getGlobalEventBus, - NullL10n, - ProgressBar, -} from "./ui_utils.js"; +import { EventBus, NullL10n, ProgressBar } from "./ui_utils.js"; import { PDFLinkService, SimpleLinkService } from "./pdf_link_service.js"; import { DownloadManager } from "./download_manager.js"; import { GenericL10n } from "./genericl10n.js"; @@ -41,9 +36,6 @@ const pdfjsVersion = PDFJSDev.eval("BUNDLE_VERSION"); // eslint-disable-next-line no-unused-vars const pdfjsBuild = PDFJSDev.eval("BUNDLE_BUILD"); -// For backwards compatibility, ensure that events are re-dispatched to the DOM. -getGlobalEventBus(/* dispatchToDOM = */ true); - export { PDFViewer, PDFSinglePageViewer, diff --git a/web/text_layer_builder.js b/web/text_layer_builder.js index a7b5fb0e2..ec56a376c 100644 --- a/web/text_layer_builder.js +++ b/web/text_layer_builder.js @@ -444,19 +444,22 @@ class DefaultTextLayerFactory { * @param {number} pageIndex * @param {PageViewport} viewport * @param {boolean} enhanceTextSelection + * @param {EventBus} eventBus * @returns {TextLayerBuilder} */ createTextLayerBuilder( textLayerDiv, pageIndex, viewport, - enhanceTextSelection = false + enhanceTextSelection = false, + eventBus ) { return new TextLayerBuilder({ textLayerDiv, pageIndex, viewport, enhanceTextSelection, + eventBus, }); } } diff --git a/web/ui_utils.js b/web/ui_utils.js index 648b65302..e258080d2 100644 --- a/web/ui_utils.js +++ b/web/ui_utils.js @@ -757,9 +757,8 @@ const animationStarted = new Promise(function(resolve) { }); /** - * Simple event bus for an application. Listeners are attached using the - * `on` and `off` methods. To raise an event, the `dispatch` method shall be - * used. + * Simple event bus for an application. Listeners are attached using the `on` + * and `off` methods. To raise an event, the `dispatch` method shall be used. */ class EventBus { constructor({ dispatchToDOM = false } = {}) { @@ -832,6 +831,9 @@ class EventBus { let globalEventBus = null; function getGlobalEventBus(dispatchToDOM = false) { + console.error( + "getGlobalEventBus is deprecated, use a manually created EventBus instance instead." + ); if (!globalEventBus) { globalEventBus = new EventBus({ dispatchToDOM }); } diff --git a/web/viewer.js b/web/viewer.js index e90526ed1..35d919b80 100644 --- a/web/viewer.js +++ b/web/viewer.js @@ -60,7 +60,7 @@ function getViewerConfiguration() { appContainer: document.body, mainContainer: document.getElementById("viewerContainer"), viewerContainer: document.getElementById("viewer"), - eventBus: null, // Using global event bus with (optional) DOM events. + eventBus: null, toolbar: { container: document.getElementById("toolbarViewer"), numPages: document.getElementById("numPages"),