From 313060aff55cd2c228a082d27a7d43911dc9c040 Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Mon, 27 Mar 2017 23:37:14 +0200 Subject: [PATCH] Refactor the `DownloadManager` initialization in `GENERIC`/`CHROME` builds, to avoid issues when converting the code to ES6 modules --- web/app.js | 16 ++++++++-------- web/chromecom.js | 4 ++-- web/download_manager.js | 25 ++++++++++++++++++------- web/viewer.js | 4 +++- 4 files changed, 31 insertions(+), 18 deletions(-) diff --git a/web/app.js b/web/app.js index e33807222..a6d59b061 100644 --- a/web/app.js +++ b/web/app.js @@ -19,7 +19,7 @@ (function (root, factory) { if (typeof define === 'function' && define.amd) { define('pdfjs-web/app', ['exports', 'pdfjs-web/ui_utils', - 'pdfjs-web/download_manager', 'pdfjs-web/pdf_history', + 'pdfjs-web/pdf_history', 'pdfjs-web/preferences', 'pdfjs-web/pdf_sidebar', 'pdfjs-web/view_history', 'pdfjs-web/pdf_thumbnail_viewer', 'pdfjs-web/toolbar', 'pdfjs-web/secondary_toolbar', @@ -32,7 +32,7 @@ 'pdfjs-web/dom_events', 'pdfjs-web/pdfjs'], factory); } else if (typeof exports !== 'undefined') { - factory(exports, require('./ui_utils.js'), require('./download_manager.js'), + factory(exports, require('./ui_utils.js'), require('./pdf_history.js'), require('./preferences.js'), require('./pdf_sidebar.js'), require('./view_history.js'), require('./pdf_thumbnail_viewer.js'), require('./toolbar.js'), @@ -46,7 +46,7 @@ require('./dom_events.js'), require('./pdfjs.js')); } else { factory((root.pdfjsWebApp = {}), root.pdfjsWebUIUtils, - root.pdfjsWebDownloadManager, root.pdfjsWebPDFHistory, + root.pdfjsWebPDFHistory, root.pdfjsWebPreferences, root.pdfjsWebPDFSidebar, root.pdfjsWebViewHistory, root.pdfjsWebPDFThumbnailViewer, root.pdfjsWebToolbar, root.pdfjsWebSecondaryToolbar, @@ -58,7 +58,7 @@ root.pdfjsWebPDFFindController, root.pdfjsWebPDFFindBar, root.pdfjsWebDOMEvents, root.pdfjsWebPDFJS); } -}(this, function (exports, uiUtilsLib, downloadManagerLib, pdfHistoryLib, +}(this, function (exports, uiUtilsLib, pdfHistoryLib, preferencesLib, pdfSidebarLib, viewHistoryLib, pdfThumbnailViewerLib, toolbarLib, secondaryToolbarLib, passwordPromptLib, pdfPresentationModeLib, @@ -124,13 +124,13 @@ function configure(PDFJS) { } } -var DefaultExernalServices = { +var DefaultExternalServices = { updateFindControlState: function (data) {}, initPassiveLoading: function (callbacks) {}, fallback: function (data, callback) {}, reportTelemetry: function (data) {}, createDownloadManager: function () { - return new downloadManagerLib.DownloadManager(); + throw new Error('Not implemented: createDownloadManager'); }, supportsIntegratedFind: false, supportsDocumentFonts: true, @@ -196,7 +196,7 @@ var PDFViewerApplication = { isViewerEmbedded: (window.parent !== window), url: '', baseUrl: '', - externalServices: DefaultExernalServices, + externalServices: DefaultExternalServices, // called once when the document is loaded initialize: function pdfViewInitialize(appConfig) { @@ -2270,6 +2270,6 @@ var PDFPrintServiceFactory = { }; exports.PDFViewerApplication = PDFViewerApplication; -exports.DefaultExernalServices = DefaultExernalServices; +exports.DefaultExternalServices = DefaultExternalServices; exports.PDFPrintServiceFactory = PDFPrintServiceFactory; })); diff --git a/web/chromecom.js b/web/chromecom.js index 902052cb4..27c91dc18 100644 --- a/web/chromecom.js +++ b/web/chromecom.js @@ -36,7 +36,7 @@ } var PDFViewerApplication = app.PDFViewerApplication; - var DefaultExernalServices = app.DefaultExernalServices; + var DefaultExternalServices = app.DefaultExternalServices; var OverlayManager = overlayManager.OverlayManager; var Preferences = preferences.Preferences; @@ -349,7 +349,7 @@ }); }; - var ChromeExternalServices = Object.create(DefaultExernalServices); + var ChromeExternalServices = Object.create(DefaultExternalServices); ChromeExternalServices.initPassiveLoading = function (callbacks) { var appConfig = PDFViewerApplication.appConfig; ChromeCom.resolvePDFFile(appConfig.defaultUrl, diff --git a/web/download_manager.js b/web/download_manager.js index 87e29544d..a489899b4 100644 --- a/web/download_manager.js +++ b/web/download_manager.js @@ -17,18 +17,23 @@ (function (root, factory) { if (typeof define === 'function' && define.amd) { - define('pdfjs-web/download_manager', ['exports', 'pdfjs-web/pdfjs'], - factory); + define('pdfjs-web/download_manager', ['exports', 'pdfjs-web/app', + 'pdfjs-web/pdfjs'], factory); } else if (typeof exports !== 'undefined') { - factory(exports, require('./pdfjs.js')); + factory(exports, require('./app.js'), require('./pdfjs.js')); } else { - factory((root.pdfjsWebDownloadManager = {}), root.pdfjsWebPDFJS); + factory((root.pdfjsWebDownloadManager = {}), root.pdfjsWebApp, + root.pdfjsWebPDFJS); } -}(this, function (exports, pdfjsLib) { -if (typeof PDFJSDev !== 'undefined' && PDFJSDev.test('FIREFOX || MOZCENTRAL')) { - return; +}(this, function (exports, app, pdfjsLib) { +if (typeof PDFJSDev !== 'undefined' && !PDFJSDev.test('CHROME || GENERIC')) { + throw new Error('Module "pdfjs-web/download_manager" shall not be used ' + + 'outside CHROME and GENERIC builds.'); } +var PDFViewerApplication = app.PDFViewerApplication; +var DefaultExternalServices = app.DefaultExternalServices; + function download(blobUrl, filename) { var a = document.createElement('a'); if (a.click) { @@ -107,5 +112,11 @@ DownloadManager.prototype = { } }; +var GenericExternalServices = Object.create(DefaultExternalServices); +GenericExternalServices.createDownloadManager = function () { + return new DownloadManager(); +}; +PDFViewerApplication.externalServices = GenericExternalServices; + exports.DownloadManager = DownloadManager; })); diff --git a/web/viewer.js b/web/viewer.js index f9e3bbe41..3f9c67322 100644 --- a/web/viewer.js +++ b/web/viewer.js @@ -50,6 +50,7 @@ if (typeof PDFJSDev !== 'undefined' && PDFJSDev.test('CHROME')) { } if (typeof PDFJSDev !== 'undefined' && PDFJSDev.test('CHROME || GENERIC')) { require('./pdf_print_service.js'); + require('./download_manager.js'); } function getViewerConfiguration() { @@ -172,7 +173,8 @@ function webViewerLoad() { var config = getViewerConfiguration(); if (typeof PDFJSDev === 'undefined' || !PDFJSDev.test('PRODUCTION')) { Promise.all([SystemJS.import('pdfjs-web/app'), - SystemJS.import('pdfjs-web/pdf_print_service')]) + SystemJS.import('pdfjs-web/pdf_print_service'), + SystemJS.import('pdfjs-web/download_manager')]) .then(function (modules) { var app = modules[0]; window.PDFViewerApplication = app.PDFViewerApplication;