From 07d610615c2832b9dc3ca1f5cdd976dc64510ea7 Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Thu, 7 Jun 2018 13:52:40 +0200 Subject: [PATCH] Move, and modernize, `Util.loadScript` from `src/shared/util.js` to `src/display/dom_utils.js` Not only is the `Util.loadScript` helper function unused on the Worker side, even trying to use it there would throw an Error (since `document` isn't defined/available in Workers). Hence this helper function is moved, and its code modernized slightly by having it return a Promise rather than needing a callback function. Finally, to reduced code duplication, the "new" loadScript function is exported and used in the viewer. --- src/display/api.js | 6 ++--- src/display/dom_utils.js | 14 +++++++++++ src/pdf.js | 1 + src/shared/util.js | 15 ------------ web/app.js | 51 +++++++++++++--------------------------- 5 files changed, 34 insertions(+), 53 deletions(-) diff --git a/src/display/api.js b/src/display/api.js index acd8fc746..c9c8d4164 100644 --- a/src/display/api.js +++ b/src/display/api.js @@ -21,8 +21,8 @@ import { UnexpectedResponseException, UnknownErrorException, unreachable, Util, warn } from '../shared/util'; import { - DOMCanvasFactory, DOMCMapReaderFactory, DummyStatTimer, PageViewport, - RenderingCancelledException, StatTimer + DOMCanvasFactory, DOMCMapReaderFactory, DummyStatTimer, loadScript, + PageViewport, RenderingCancelledException, StatTimer } from './dom_utils'; import { FontFaceObject, FontLoader } from './font_loader'; import { apiCompatibilityParams } from './api_compatibility'; @@ -1356,7 +1356,7 @@ var PDFWorker = (function PDFWorkerClosure() { } } else { let loader = fakeWorkerFilesLoader || function(callback) { - Util.loadScript(getWorkerSrc(), function() { + loadScript(getWorkerSrc()).then(function() { callback(window.pdfjsWorker.WorkerMessageHandler); }); }; diff --git a/src/display/dom_utils.js b/src/display/dom_utils.js index 94e3b10f2..06f7a7b8e 100644 --- a/src/display/dom_utils.js +++ b/src/display/dom_utils.js @@ -428,6 +428,19 @@ class DummyStatTimer { } } +function loadScript(src) { + return new Promise((resolve, reject) => { + let script = document.createElement('script'); + script.src = src; + + script.onload = resolve; + script.onerror = function() { + reject(new Error(`Cannot load script at: ${script.src}`)); + }; + (document.head || document.documentElement).appendChild(script); + }); +} + export { PageViewport, RenderingCancelledException, @@ -440,4 +453,5 @@ export { DOMSVGFactory, StatTimer, DummyStatTimer, + loadScript, }; diff --git a/src/pdf.js b/src/pdf.js index 1de68d330..cc4c2c5e6 100644 --- a/src/pdf.js +++ b/src/pdf.js @@ -108,6 +108,7 @@ exports.RenderingCancelledException = exports.getFilenameFromUrl = pdfjsDisplayDOMUtils.getFilenameFromUrl; exports.LinkTarget = pdfjsDisplayDOMUtils.LinkTarget; exports.addLinkAttributes = pdfjsDisplayDOMUtils.addLinkAttributes; +exports.loadScript = pdfjsDisplayDOMUtils.loadScript; exports.GlobalWorkerOptions = pdfjsDisplayWorkerOptions.GlobalWorkerOptions; exports.apiCompatibilityParams = pdfjsDisplayAPICompatibility.apiCompatibilityParams; diff --git a/src/shared/util.js b/src/shared/util.js index 6ffbedf60..a52df0c42 100644 --- a/src/shared/util.js +++ b/src/shared/util.js @@ -908,21 +908,6 @@ var Util = (function UtilClosure() { } }; - Util.loadScript = function Util_loadScript(src, callback) { - var script = document.createElement('script'); - var loaded = false; - script.setAttribute('src', src); - if (callback) { - script.onload = function() { - if (!loaded) { - callback(); - } - loaded = true; - }; - } - document.getElementsByTagName('head')[0].appendChild(script); - }; - return Util; })(); diff --git a/web/app.js b/web/app.js index de4f8c8ec..b9f3f1d62 100644 --- a/web/app.js +++ b/web/app.js @@ -22,8 +22,8 @@ import { } from './ui_utils'; import { build, createBlob, getDocument, getFilenameFromUrl, GlobalWorkerOptions, - InvalidPDFException, LinkTarget, MissingPDFException, OPS, PDFWorker, shadow, - UnexpectedResponseException, UNSUPPORTED_FEATURES, version + InvalidPDFException, LinkTarget, loadScript, MissingPDFException, OPS, + PDFWorker, shadow, UnexpectedResponseException, UNSUPPORTED_FEATURES, version } from 'pdfjs-lib'; import { CursorTool, PDFCursorTools } from './pdf_cursor_tools'; import { PDFRenderingQueue, RenderingStates } from './pdf_rendering_queue'; @@ -1551,11 +1551,11 @@ if (typeof PDFJSDev === 'undefined' || PDFJSDev.test('GENERIC')) { } function loadFakeWorker() { - return new Promise(function(resolve, reject) { - if (!GlobalWorkerOptions.workerSrc) { - GlobalWorkerOptions.workerSrc = AppOptions.get('workerSrc'); - } - if (typeof PDFJSDev === 'undefined' || !PDFJSDev.test('PRODUCTION')) { + if (!GlobalWorkerOptions.workerSrc) { + GlobalWorkerOptions.workerSrc = AppOptions.get('workerSrc'); + } + if (typeof PDFJSDev === 'undefined' || !PDFJSDev.test('PRODUCTION')) { + return new Promise(function(resolve, reject) { if (typeof SystemJS === 'object') { SystemJS.import('pdfjs/core/worker').then((worker) => { window.pdfjsWorker = worker; @@ -1568,37 +1568,18 @@ function loadFakeWorker() { reject(new Error( 'SystemJS or CommonJS must be used to load fake worker.')); } - } else { - let script = document.createElement('script'); - script.src = PDFWorker.getWorkerSrc(); - script.onload = function() { - resolve(); - }; - script.onerror = function() { - reject(new Error(`Cannot load fake worker at: ${script.src}`)); - }; - (document.head || document.documentElement).appendChild(script); - } - }); + }); + } + return loadScript(PDFWorker.getWorkerSrc()); } function loadAndEnablePDFBug(enabledTabs) { - return new Promise(function (resolve, reject) { - let appConfig = PDFViewerApplication.appConfig; - let script = document.createElement('script'); - script.src = appConfig.debuggerScriptPath; - script.onload = function () { - PDFBug.enable(enabledTabs); - PDFBug.init({ - OPS, - }, appConfig.mainContainer); - resolve(); - }; - script.onerror = function () { - reject(new Error('Cannot load debugger at ' + script.src)); - }; - (document.getElementsByTagName('head')[0] || document.body). - appendChild(script); + let appConfig = PDFViewerApplication.appConfig; + return loadScript(appConfig.debuggerScriptPath).then(function() { + PDFBug.enable(enabledTabs); + PDFBug.init({ + OPS, + }, appConfig.mainContainer); }); }