|
@@ -0,0 +1,225 @@
|
|
|
|
+/* Copyright 2016 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.
|
|
|
|
+ */
|
|
|
|
+/* globals chrome */
|
|
|
|
+
|
|
|
|
+'use strict';
|
|
|
|
+
|
|
|
|
+if (typeof PDFJSDev !== 'undefined' && PDFJSDev.test('CHROME')) {
|
|
|
|
+ var defaultUrl; // eslint-disable-line no-var
|
|
|
|
+
|
|
|
|
+ (function rewriteUrlClosure() {
|
|
|
|
+ // Run this code outside DOMContentLoaded to make sure that the URL
|
|
|
|
+ // is rewritten as soon as possible.
|
|
|
|
+ let queryString = document.location.search.slice(1);
|
|
|
|
+ let m = /(^|&)file=([^&]*)/.exec(queryString);
|
|
|
|
+ defaultUrl = m ? decodeURIComponent(m[2]) : '';
|
|
|
|
+
|
|
|
|
+ // Example: chrome-extension://.../http://example.com/file.pdf
|
|
|
|
+ let humanReadableUrl = '/' + defaultUrl + location.hash;
|
|
|
|
+ history.replaceState(history.state, '', humanReadableUrl);
|
|
|
|
+ if (top === window) {
|
|
|
|
+ chrome.runtime.sendMessage('showPageAction');
|
|
|
|
+ }
|
|
|
|
+ })();
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+let pdfjsWebApp, pdfjsWebAppOptions;
|
|
|
|
+if (typeof PDFJSDev !== 'undefined' && PDFJSDev.test('PRODUCTION')) {
|
|
|
|
+ pdfjsWebApp = require('./app.js');
|
|
|
|
+ pdfjsWebAppOptions = require('./app_options.js');
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+if (typeof PDFJSDev !== 'undefined' && PDFJSDev.test('FIREFOX || MOZCENTRAL')) {
|
|
|
|
+ require('./firefoxcom.js');
|
|
|
|
+ require('./firefox_print_service.js');
|
|
|
|
+}
|
|
|
|
+if (typeof PDFJSDev !== 'undefined' && PDFJSDev.test('GENERIC')) {
|
|
|
|
+ require('./genericcom.js');
|
|
|
|
+}
|
|
|
|
+if (typeof PDFJSDev !== 'undefined' && PDFJSDev.test('CHROME')) {
|
|
|
|
+ require('./chromecom.js');
|
|
|
|
+}
|
|
|
|
+if (typeof PDFJSDev !== 'undefined' && PDFJSDev.test('CHROME || GENERIC')) {
|
|
|
|
+ require('./pdf_print_service.js');
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function getViewerConfiguration() {
|
|
|
|
+ return {
|
|
|
|
+ appContainer: document.body,
|
|
|
|
+ mainContainer: document.getElementById('viewerContainer'),
|
|
|
|
+ viewerContainer: document.getElementById('viewer'),
|
|
|
|
+ eventBus: null, // Using global event bus with (optional) DOM events.
|
|
|
|
+ toolbar: {
|
|
|
|
+ container: document.getElementById('toolbarViewer'),
|
|
|
|
+ numPages: document.getElementById('numPages'),
|
|
|
|
+ pageNumber: document.getElementById('pageNumber'),
|
|
|
|
+ scaleSelectContainer: document.getElementById('scaleSelectContainer'),
|
|
|
|
+ scaleSelect: document.getElementById('scaleSelect'),
|
|
|
|
+ customScaleOption: document.getElementById('customScaleOption'),
|
|
|
|
+ previous: document.getElementById('previous'),
|
|
|
|
+ next: document.getElementById('next'),
|
|
|
|
+ zoomIn: document.getElementById('zoomIn'),
|
|
|
|
+ zoomOut: document.getElementById('zoomOut'),
|
|
|
|
+ viewFind: document.getElementById('viewFind'),
|
|
|
|
+ openFile: document.getElementById('openFile'),
|
|
|
|
+ print: document.getElementById('print'),
|
|
|
|
+ presentationModeButton: document.getElementById('presentationMode'),
|
|
|
|
+ download: document.getElementById('download'),
|
|
|
|
+ viewBookmark: document.getElementById('viewBookmark'),
|
|
|
|
+ },
|
|
|
|
+ secondaryToolbar: {
|
|
|
|
+ toolbar: document.getElementById('secondaryToolbar'),
|
|
|
|
+ toggleButton: document.getElementById('secondaryToolbarToggle'),
|
|
|
|
+ toolbarButtonContainer:
|
|
|
|
+ document.getElementById('secondaryToolbarButtonContainer'),
|
|
|
|
+ presentationModeButton:
|
|
|
|
+ document.getElementById('secondaryPresentationMode'),
|
|
|
|
+ openFileButton: document.getElementById('secondaryOpenFile'),
|
|
|
|
+ printButton: document.getElementById('secondaryPrint'),
|
|
|
|
+ downloadButton: document.getElementById('secondaryDownload'),
|
|
|
|
+ viewBookmarkButton: document.getElementById('secondaryViewBookmark'),
|
|
|
|
+ firstPageButton: document.getElementById('firstPage'),
|
|
|
|
+ lastPageButton: document.getElementById('lastPage'),
|
|
|
|
+ pageRotateCwButton: document.getElementById('pageRotateCw'),
|
|
|
|
+ pageRotateCcwButton: document.getElementById('pageRotateCcw'),
|
|
|
|
+ cursorSelectToolButton: document.getElementById('cursorSelectTool'),
|
|
|
|
+ cursorHandToolButton: document.getElementById('cursorHandTool'),
|
|
|
|
+ scrollVerticalButton: document.getElementById('scrollVertical'),
|
|
|
|
+ scrollHorizontalButton: document.getElementById('scrollHorizontal'),
|
|
|
|
+ scrollWrappedButton: document.getElementById('scrollWrapped'),
|
|
|
|
+ spreadNoneButton: document.getElementById('spreadNone'),
|
|
|
|
+ spreadOddButton: document.getElementById('spreadOdd'),
|
|
|
|
+ spreadEvenButton: document.getElementById('spreadEven'),
|
|
|
|
+ documentPropertiesButton: document.getElementById('documentProperties'),
|
|
|
|
+ },
|
|
|
|
+ fullscreen: {
|
|
|
|
+ contextFirstPage: document.getElementById('contextFirstPage'),
|
|
|
|
+ contextLastPage: document.getElementById('contextLastPage'),
|
|
|
|
+ contextPageRotateCw: document.getElementById('contextPageRotateCw'),
|
|
|
|
+ contextPageRotateCcw: document.getElementById('contextPageRotateCcw'),
|
|
|
|
+ },
|
|
|
|
+ sidebar: {
|
|
|
|
+ // Divs (and sidebar button)
|
|
|
|
+ outerContainer: document.getElementById('outerContainer'),
|
|
|
|
+ viewerContainer: document.getElementById('viewerContainer'),
|
|
|
|
+ toggleButton: document.getElementById('sidebarToggle'),
|
|
|
|
+ // Buttons
|
|
|
|
+ thumbnailButton: document.getElementById('viewThumbnail'),
|
|
|
|
+ outlineButton: document.getElementById('viewOutline'),
|
|
|
|
+ attachmentsButton: document.getElementById('viewAttachments'),
|
|
|
|
+ // Views
|
|
|
|
+ thumbnailView: document.getElementById('thumbnailView'),
|
|
|
|
+ outlineView: document.getElementById('outlineView'),
|
|
|
|
+ attachmentsView: document.getElementById('attachmentsView'),
|
|
|
|
+ },
|
|
|
|
+ sidebarResizer: {
|
|
|
|
+ outerContainer: document.getElementById('outerContainer'),
|
|
|
|
+ resizer: document.getElementById('sidebarResizer'),
|
|
|
|
+ },
|
|
|
|
+ findBar: {
|
|
|
|
+ bar: document.getElementById('findbar'),
|
|
|
|
+ toggleButton: document.getElementById('viewFind'),
|
|
|
|
+ findField: document.getElementById('findInput'),
|
|
|
|
+ highlightAllCheckbox: document.getElementById('findHighlightAll'),
|
|
|
|
+ caseSensitiveCheckbox: document.getElementById('findMatchCase'),
|
|
|
|
+ entireWordCheckbox: document.getElementById('findEntireWord'),
|
|
|
|
+ findMsg: document.getElementById('findMsg'),
|
|
|
|
+ findResultsCount: document.getElementById('findResultsCount'),
|
|
|
|
+ findPreviousButton: document.getElementById('findPrevious'),
|
|
|
|
+ findNextButton: document.getElementById('findNext'),
|
|
|
|
+ },
|
|
|
|
+ passwordOverlay: {
|
|
|
|
+ overlayName: 'passwordOverlay',
|
|
|
|
+ container: document.getElementById('passwordOverlay'),
|
|
|
|
+ label: document.getElementById('passwordText'),
|
|
|
|
+ input: document.getElementById('password'),
|
|
|
|
+ submitButton: document.getElementById('passwordSubmit'),
|
|
|
|
+ cancelButton: document.getElementById('passwordCancel'),
|
|
|
|
+ },
|
|
|
|
+ documentProperties: {
|
|
|
|
+ overlayName: 'documentPropertiesOverlay',
|
|
|
|
+ container: document.getElementById('documentPropertiesOverlay'),
|
|
|
|
+ closeButton: document.getElementById('documentPropertiesClose'),
|
|
|
|
+ fields: {
|
|
|
|
+ 'fileName': document.getElementById('fileNameField'),
|
|
|
|
+ 'fileSize': document.getElementById('fileSizeField'),
|
|
|
|
+ 'title': document.getElementById('titleField'),
|
|
|
|
+ 'author': document.getElementById('authorField'),
|
|
|
|
+ 'subject': document.getElementById('subjectField'),
|
|
|
|
+ 'keywords': document.getElementById('keywordsField'),
|
|
|
|
+ 'creationDate': document.getElementById('creationDateField'),
|
|
|
|
+ 'modificationDate': document.getElementById('modificationDateField'),
|
|
|
|
+ 'creator': document.getElementById('creatorField'),
|
|
|
|
+ 'producer': document.getElementById('producerField'),
|
|
|
|
+ 'version': document.getElementById('versionField'),
|
|
|
|
+ 'pageCount': document.getElementById('pageCountField'),
|
|
|
|
+ 'pageSize': document.getElementById('pageSizeField'),
|
|
|
|
+ 'linearized': document.getElementById('linearizedField'),
|
|
|
|
+ },
|
|
|
|
+ },
|
|
|
|
+ errorWrapper: {
|
|
|
|
+ container: document.getElementById('errorWrapper'),
|
|
|
|
+ errorMessage: document.getElementById('errorMessage'),
|
|
|
|
+ closeButton: document.getElementById('errorClose'),
|
|
|
|
+ errorMoreInfo: document.getElementById('errorMoreInfo'),
|
|
|
|
+ moreInfoButton: document.getElementById('errorShowMore'),
|
|
|
|
+ lessInfoButton: document.getElementById('errorShowLess'),
|
|
|
|
+ },
|
|
|
|
+ printContainer: document.getElementById('printContainer'),
|
|
|
|
+ openFileInputName: 'fileInput',
|
|
|
|
+ debuggerScriptPath: './debugger.js',
|
|
|
|
+ };
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function webViewerLoad() {
|
|
|
|
+ let config = getViewerConfiguration();
|
|
|
|
+ if (typeof PDFJSDev === 'undefined' || !PDFJSDev.test('PRODUCTION')) {
|
|
|
|
+ Promise.all([
|
|
|
|
+ SystemJS.import('pdfjs-web/app'),
|
|
|
|
+ SystemJS.import('pdfjs-web/app_options'),
|
|
|
|
+ SystemJS.import('pdfjs-web/genericcom'),
|
|
|
|
+ SystemJS.import('pdfjs-web/pdf_print_service'),
|
|
|
|
+ ]).then(function([app, appOptions, ...otherModules]) {
|
|
|
|
+ window.PDFViewerApplication = app.PDFViewerApplication;
|
|
|
|
+ window.PDFViewerApplicationOptions = appOptions.AppOptions;
|
|
|
|
+ app.PDFViewerApplication.run(config);
|
|
|
|
+ });
|
|
|
|
+ } else {
|
|
|
|
+ if (typeof PDFJSDev !== 'undefined' && PDFJSDev.test('CHROME')) {
|
|
|
|
+ pdfjsWebAppOptions.AppOptions.set('defaultUrl', defaultUrl);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ window.PDFViewerApplication = pdfjsWebApp.PDFViewerApplication;
|
|
|
|
+ window.PDFViewerApplicationOptions = pdfjsWebAppOptions.AppOptions;
|
|
|
|
+
|
|
|
|
+ if (typeof PDFJSDev !== 'undefined' && PDFJSDev.test('GENERIC')) {
|
|
|
|
+ // Give custom implementations of the default viewer a simpler way to
|
|
|
|
+ // set various `AppOptions`, by dispatching an event once all viewer
|
|
|
|
+ // files are loaded but *before* the viewer initialization has run.
|
|
|
|
+ const event = document.createEvent('CustomEvent');
|
|
|
|
+ event.initCustomEvent('webviewerloaded', true, true, {});
|
|
|
|
+ document.dispatchEvent(event);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ pdfjsWebApp.PDFViewerApplication.run(config);
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+if (document.readyState === 'interactive' ||
|
|
|
|
+ document.readyState === 'complete') {
|
|
|
|
+ webViewerLoad();
|
|
|
|
+} else {
|
|
|
|
+ document.addEventListener('DOMContentLoaded', webViewerLoad, true);
|
|
|
|
+}
|