2011-09-13 02:37:33 +09:00
|
|
|
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
2011-07-06 15:06:45 +09:00
|
|
|
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
|
2012-09-01 07:48:21 +09:00
|
|
|
/* Copyright 2012 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.
|
|
|
|
*/
|
2014-08-07 00:09:27 +09:00
|
|
|
/* globals PDFJS, PDFBug, FirefoxCom, Stats, Cache, ProgressBar,
|
2015-02-01 19:31:18 +09:00
|
|
|
DownloadManager, getFileName, getPDFFileNameFromURL,
|
2014-09-30 01:15:06 +09:00
|
|
|
PDFHistory, Preferences, SidebarView, ViewHistory, Stats,
|
2014-09-13 04:48:44 +09:00
|
|
|
PDFThumbnailViewer, URL, noContextMenuHandler, SecondaryToolbar,
|
2015-04-28 00:25:32 +09:00
|
|
|
PasswordPrompt, PDFPresentationMode, PDFDocumentProperties, HandTool,
|
|
|
|
Promise, PDFLinkService, PDFOutlineView, PDFAttachmentView,
|
2014-09-13 03:39:23 +09:00
|
|
|
OverlayManager, PDFFindController, PDFFindBar, getVisibleElements,
|
2014-09-16 05:46:01 +09:00
|
|
|
watchScroll, PDFViewer, PDFRenderingQueue, PresentationModeState,
|
2015-04-28 00:25:32 +09:00
|
|
|
parseQueryString, RenderingStates, DEFAULT_SCALE, UNKNOWN_SCALE,
|
2014-09-16 05:46:01 +09:00
|
|
|
IGNORE_CURRENT_POSITION_ON_ZOOM: true */
|
2011-05-26 23:02:52 +09:00
|
|
|
|
2011-07-06 15:06:45 +09:00
|
|
|
'use strict';
|
2011-06-19 09:35:28 +09:00
|
|
|
|
2012-11-10 06:34:11 +09:00
|
|
|
var DEFAULT_URL = 'compressed.tracemonkey-pldi-09.pdf';
|
|
|
|
var DEFAULT_SCALE_DELTA = 1.1;
|
|
|
|
var MIN_SCALE = 0.25;
|
2014-05-24 10:43:43 +09:00
|
|
|
var MAX_SCALE = 10.0;
|
2013-12-22 08:05:29 +09:00
|
|
|
var VIEW_HISTORY_MEMORY = 20;
|
2013-06-02 21:31:28 +09:00
|
|
|
var SCALE_SELECT_CONTAINER_PADDING = 8;
|
|
|
|
var SCALE_SELECT_PADDING = 22;
|
2014-07-18 20:53:04 +09:00
|
|
|
var PAGE_NUMBER_LOADING_INDICATOR = 'visiblePageIsLoading';
|
2014-08-17 08:06:03 +09:00
|
|
|
var DISABLE_AUTO_FETCH_LOADING_BAR_TIMEOUT = 5000;
|
2013-10-03 01:05:46 +09:00
|
|
|
//#if B2G
|
2014-05-30 07:44:41 +09:00
|
|
|
//PDFJS.useOnlyCssZoom = true;
|
2014-02-04 07:14:54 +09:00
|
|
|
//PDFJS.disableTextLayer = true;
|
2013-10-03 01:05:46 +09:00
|
|
|
//#endif
|
2012-06-19 01:48:47 +09:00
|
|
|
|
2013-07-09 22:40:58 +09:00
|
|
|
PDFJS.imageResourcesPath = './images/';
|
2012-10-30 04:44:18 +09:00
|
|
|
//#if (FIREFOX || MOZCENTRAL || B2G || GENERIC || CHROME)
|
2013-08-13 02:48:06 +09:00
|
|
|
//PDFJS.workerSrc = '../build/pdf.worker.js';
|
2012-09-11 09:39:51 +09:00
|
|
|
//#endif
|
2014-02-12 03:27:09 +09:00
|
|
|
//#if !PRODUCTION
|
2014-03-18 03:20:24 +09:00
|
|
|
PDFJS.cMapUrl = '../external/bcmaps/';
|
|
|
|
PDFJS.cMapPacked = true;
|
2014-02-12 03:27:09 +09:00
|
|
|
//#else
|
|
|
|
//PDFJS.cMapUrl = '../web/cmaps/';
|
2014-03-15 03:22:02 +09:00
|
|
|
//PDFJS.cMapPacked = true;
|
2014-02-12 03:27:09 +09:00
|
|
|
//#endif
|
2011-07-29 20:26:43 +09:00
|
|
|
|
2012-05-01 05:29:05 +09:00
|
|
|
var mozL10n = document.mozL10n || document.webL10n;
|
|
|
|
|
2013-06-19 01:05:55 +09:00
|
|
|
//#include ui_utils.js
|
2013-11-19 07:51:06 +09:00
|
|
|
//#include preferences.js
|
Add mozPrintCallback shim
This shim does the following:
1. Intercept window.print()
2. For a window.print() call (if allowed, ie. no previous print job):
1. Dispatch the beforeprint event.
2. Render a printg progress dialog.
3. For each canvas, call mozPrintCallback if existent (one at a time, async).
4. During each mozPrintCallback callback, update the progress dialog.
5. When all <canvas>es have been rendered, invoke the real window.print().
6. Dispatch the afterprint event.
The shim is not included in Firefox through the preprocessor.
Keyboard shortcuts (Ctrl/Cmd + P) are intercepted and default behavior
(i.e. printing) is prevented, and the steps for window.print() are run.
window.attachEvent is used, in order to cancel printing in IE10 and
earlier (courtesy of Stack Overflow - http://stackoverflow.com/a/15302847).
Unfortunately, this doesn't work in IE11 - if Ctrl + P is used, the
print dialog will be shown twice: Once because of Ctrl + P, and again
when all pages have finished rendering.
This logic of this polyfill is not specific to PDF.js, so it can also
be used in other projects.
There's one additional modification in PDF.js's viewer.js: The printed
<canvas> element is wrapped in a <div>. This is needed, because Chrome
would otherwise print one canvas on two pages.
2013-09-11 01:17:26 +09:00
|
|
|
|
|
|
|
//#if !(FIREFOX || MOZCENTRAL || B2G)
|
|
|
|
//#include mozPrintCallback_polyfill.js
|
|
|
|
//#endif
|
|
|
|
|
2013-07-13 03:14:13 +09:00
|
|
|
//#if GENERIC || CHROME
|
|
|
|
//#include download_manager.js
|
|
|
|
//#endif
|
2015-04-05 04:26:33 +09:00
|
|
|
//#if B2G
|
|
|
|
//var DownloadManager = (function DownloadManagerClosure() {
|
|
|
|
// return function DownloadManager() {};
|
|
|
|
//})();
|
|
|
|
//#endif
|
2012-03-22 07:36:10 +09:00
|
|
|
|
2012-08-02 03:29:13 +09:00
|
|
|
//#if FIREFOX || MOZCENTRAL
|
2012-08-02 07:31:25 +09:00
|
|
|
//#include firefoxcom.js
|
2012-08-02 03:29:13 +09:00
|
|
|
//#endif
|
2012-01-26 10:40:08 +09:00
|
|
|
|
2013-08-14 01:28:13 +09:00
|
|
|
//#if CHROME
|
|
|
|
//#include chromecom.js
|
|
|
|
//#endif
|
|
|
|
|
2013-12-22 08:05:29 +09:00
|
|
|
//#include view_history.js
|
2013-06-19 01:05:55 +09:00
|
|
|
//#include pdf_find_bar.js
|
|
|
|
//#include pdf_find_controller.js
|
2015-04-28 00:25:32 +09:00
|
|
|
//#include pdf_link_service.js
|
2013-07-19 00:18:27 +09:00
|
|
|
//#include pdf_history.js
|
2013-09-05 06:48:31 +09:00
|
|
|
//#include secondary_toolbar.js
|
2015-01-28 21:58:40 +09:00
|
|
|
//#include pdf_presentation_mode.js
|
2013-10-03 05:09:43 +09:00
|
|
|
//#include hand_tool.js
|
2014-05-13 19:08:39 +09:00
|
|
|
//#include overlay_manager.js
|
|
|
|
//#include password_prompt.js
|
2015-04-25 03:35:11 +09:00
|
|
|
//#include pdf_document_properties.js
|
2014-09-16 05:46:01 +09:00
|
|
|
//#include pdf_viewer.js
|
2015-01-24 21:51:55 +09:00
|
|
|
//#include pdf_thumbnail_viewer.js
|
2015-01-28 06:38:45 +09:00
|
|
|
//#include pdf_outline_view.js
|
2015-01-28 05:49:29 +09:00
|
|
|
//#include pdf_attachment_view.js
|
2013-05-16 07:31:17 +09:00
|
|
|
|
2014-09-22 20:41:17 +09:00
|
|
|
var PDFViewerApplication = {
|
2011-10-02 03:54:37 +09:00
|
|
|
initialBookmark: document.location.hash.substring(1),
|
2015-04-27 23:04:11 +09:00
|
|
|
initialDestination: null,
|
2012-05-01 05:05:32 +09:00
|
|
|
initialized: false,
|
2012-05-15 09:19:09 +09:00
|
|
|
fellback: false,
|
2012-06-02 06:17:09 +09:00
|
|
|
pdfDocument: null,
|
2012-06-19 01:48:47 +09:00
|
|
|
sidebarOpen: false,
|
2014-06-25 07:23:42 +09:00
|
|
|
printing: false,
|
2014-09-21 02:21:49 +09:00
|
|
|
/** @type {PDFViewer} */
|
2014-09-13 11:27:45 +09:00
|
|
|
pdfViewer: null,
|
2014-09-21 02:21:49 +09:00
|
|
|
/** @type {PDFThumbnailViewer} */
|
2014-09-13 04:48:44 +09:00
|
|
|
pdfThumbnailViewer: null,
|
2014-09-21 02:21:49 +09:00
|
|
|
/** @type {PDFRenderingQueue} */
|
2014-09-16 01:18:28 +09:00
|
|
|
pdfRenderingQueue: null,
|
2015-02-04 02:09:11 +09:00
|
|
|
/** @type {PDFPresentationMode} */
|
|
|
|
pdfPresentationMode: null,
|
2015-04-25 03:47:38 +09:00
|
|
|
/** @type {PDFDocumentProperties} */
|
|
|
|
pdfDocumentProperties: null,
|
2015-04-28 00:25:32 +09:00
|
|
|
/** @type {PDFLinkService} */
|
|
|
|
pdfLinkService: null,
|
2015-04-27 23:04:11 +09:00
|
|
|
/** @type {PDFHistory} */
|
|
|
|
pdfHistory: null,
|
2012-09-08 08:05:14 +09:00
|
|
|
pageRotation: 0,
|
2014-09-21 02:15:18 +09:00
|
|
|
updateScaleControls: true,
|
2014-09-22 20:41:17 +09:00
|
|
|
isInitialViewSet: false,
|
|
|
|
animationStartedPromise: null,
|
2014-10-01 18:42:06 +09:00
|
|
|
preferenceSidebarViewOnLoad: SidebarView.NONE,
|
|
|
|
preferencePdfBugEnabled: false,
|
2015-01-28 07:57:46 +09:00
|
|
|
preferenceShowPreviousViewOnLoad: true,
|
2015-03-31 22:33:21 +09:00
|
|
|
preferenceDefaultZoomValue: '',
|
2013-07-20 23:33:40 +09:00
|
|
|
isViewerEmbedded: (window.parent !== window),
|
2014-07-25 06:37:31 +09:00
|
|
|
url: '',
|
2012-06-19 01:48:47 +09:00
|
|
|
|
2012-04-26 03:34:28 +09:00
|
|
|
// called once when the document is loaded
|
2012-05-01 05:05:32 +09:00
|
|
|
initialize: function pdfViewInitialize() {
|
2014-09-16 01:18:28 +09:00
|
|
|
var pdfRenderingQueue = new PDFRenderingQueue();
|
|
|
|
pdfRenderingQueue.onIdle = this.cleanup.bind(this);
|
|
|
|
this.pdfRenderingQueue = pdfRenderingQueue;
|
2012-06-19 01:48:47 +09:00
|
|
|
|
2015-04-28 00:25:32 +09:00
|
|
|
var pdfLinkService = new PDFLinkService();
|
|
|
|
this.pdfLinkService = pdfLinkService;
|
|
|
|
|
2014-09-13 11:27:45 +09:00
|
|
|
var container = document.getElementById('viewerContainer');
|
|
|
|
var viewer = document.getElementById('viewer');
|
|
|
|
this.pdfViewer = new PDFViewer({
|
|
|
|
container: container,
|
|
|
|
viewer: viewer,
|
2014-09-16 01:18:28 +09:00
|
|
|
renderingQueue: pdfRenderingQueue,
|
2015-04-28 00:25:32 +09:00
|
|
|
linkService: pdfLinkService
|
2014-09-13 11:27:45 +09:00
|
|
|
});
|
2014-09-16 01:18:28 +09:00
|
|
|
pdfRenderingQueue.setViewer(this.pdfViewer);
|
2015-04-28 00:25:32 +09:00
|
|
|
pdfLinkService.setViewer(this.pdfViewer);
|
2012-06-19 01:48:47 +09:00
|
|
|
|
2014-09-13 04:48:44 +09:00
|
|
|
var thumbnailContainer = document.getElementById('thumbnailView');
|
|
|
|
this.pdfThumbnailViewer = new PDFThumbnailViewer({
|
|
|
|
container: thumbnailContainer,
|
2014-09-16 01:18:28 +09:00
|
|
|
renderingQueue: pdfRenderingQueue,
|
2015-04-28 00:25:32 +09:00
|
|
|
linkService: pdfLinkService
|
2014-09-13 04:48:44 +09:00
|
|
|
});
|
2014-09-16 01:18:28 +09:00
|
|
|
pdfRenderingQueue.setThumbnailViewer(this.pdfThumbnailViewer);
|
2012-06-19 01:48:47 +09:00
|
|
|
|
2014-03-17 06:33:39 +09:00
|
|
|
Preferences.initialize();
|
|
|
|
|
2015-04-27 23:04:11 +09:00
|
|
|
this.pdfHistory = new PDFHistory({
|
|
|
|
linkService: pdfLinkService
|
|
|
|
});
|
|
|
|
pdfLinkService.setHistory(this.pdfHistory);
|
|
|
|
|
2014-06-26 07:15:22 +09:00
|
|
|
this.findController = new PDFFindController({
|
2014-09-15 23:49:24 +09:00
|
|
|
pdfViewer: this.pdfViewer,
|
2014-06-26 07:15:22 +09:00
|
|
|
integratedFind: this.supportsIntegratedFind
|
|
|
|
});
|
2014-09-16 04:57:12 +09:00
|
|
|
this.pdfViewer.setFindController(this.findController);
|
2014-06-26 07:15:22 +09:00
|
|
|
|
|
|
|
this.findBar = new PDFFindBar({
|
2013-10-02 06:11:46 +09:00
|
|
|
bar: document.getElementById('findbar'),
|
|
|
|
toggleButton: document.getElementById('viewFind'),
|
|
|
|
findField: document.getElementById('findInput'),
|
|
|
|
highlightAllCheckbox: document.getElementById('findHighlightAll'),
|
|
|
|
caseSensitiveCheckbox: document.getElementById('findMatchCase'),
|
|
|
|
findMsg: document.getElementById('findMsg'),
|
|
|
|
findStatusIcon: document.getElementById('findStatusIcon'),
|
|
|
|
findPreviousButton: document.getElementById('findPrevious'),
|
2014-06-26 07:15:22 +09:00
|
|
|
findNextButton: document.getElementById('findNext'),
|
|
|
|
findController: this.findController
|
2013-10-02 06:11:46 +09:00
|
|
|
});
|
|
|
|
|
2014-06-26 07:15:22 +09:00
|
|
|
this.findController.setFindBar(this.findBar);
|
2013-10-02 06:11:46 +09:00
|
|
|
|
2013-10-03 05:09:43 +09:00
|
|
|
HandTool.initialize({
|
|
|
|
container: container,
|
|
|
|
toggleHandTool: document.getElementById('toggleHandTool')
|
|
|
|
});
|
|
|
|
|
2015-04-25 03:47:38 +09:00
|
|
|
this.pdfDocumentProperties = new PDFDocumentProperties({
|
|
|
|
overlayName: 'documentPropertiesOverlay',
|
|
|
|
closeButton: document.getElementById('documentPropertiesClose'),
|
2015-04-25 04:19:58 +09:00
|
|
|
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')
|
|
|
|
}
|
2015-04-25 03:47:38 +09:00
|
|
|
});
|
|
|
|
|
2013-09-05 06:48:31 +09:00
|
|
|
SecondaryToolbar.initialize({
|
|
|
|
toolbar: document.getElementById('secondaryToolbar'),
|
|
|
|
toggleButton: document.getElementById('secondaryToolbarToggle'),
|
2013-10-19 06:03:28 +09:00
|
|
|
presentationModeButton:
|
|
|
|
document.getElementById('secondaryPresentationMode'),
|
2013-09-05 06:48:31 +09:00
|
|
|
openFile: document.getElementById('secondaryOpenFile'),
|
|
|
|
print: document.getElementById('secondaryPrint'),
|
|
|
|
download: document.getElementById('secondaryDownload'),
|
2014-01-17 20:16:43 +09:00
|
|
|
viewBookmark: document.getElementById('secondaryViewBookmark'),
|
2013-09-05 06:48:31 +09:00
|
|
|
firstPage: document.getElementById('firstPage'),
|
|
|
|
lastPage: document.getElementById('lastPage'),
|
|
|
|
pageRotateCw: document.getElementById('pageRotateCw'),
|
2014-01-22 08:07:07 +09:00
|
|
|
pageRotateCcw: document.getElementById('pageRotateCcw'),
|
|
|
|
documentPropertiesButton: document.getElementById('documentProperties')
|
2013-09-05 06:48:31 +09:00
|
|
|
});
|
|
|
|
|
2015-01-29 21:37:49 +09:00
|
|
|
if (this.supportsFullscreen) {
|
2015-02-01 19:31:18 +09:00
|
|
|
var toolbar = SecondaryToolbar;
|
2015-02-04 02:09:11 +09:00
|
|
|
this.pdfPresentationMode = new PDFPresentationMode({
|
2015-01-29 21:37:49 +09:00
|
|
|
container: container,
|
2015-02-02 06:53:59 +09:00
|
|
|
viewer: viewer,
|
2015-02-01 19:31:18 +09:00
|
|
|
pdfThumbnailViewer: this.pdfThumbnailViewer,
|
|
|
|
contextMenuItems: [
|
|
|
|
{ element: document.getElementById('contextFirstPage'),
|
|
|
|
handler: toolbar.firstPageClick.bind(toolbar) },
|
|
|
|
{ element: document.getElementById('contextLastPage'),
|
|
|
|
handler: toolbar.lastPageClick.bind(toolbar) },
|
|
|
|
{ element: document.getElementById('contextPageRotateCw'),
|
|
|
|
handler: toolbar.pageRotateCwClick.bind(toolbar) },
|
|
|
|
{ element: document.getElementById('contextPageRotateCcw'),
|
|
|
|
handler: toolbar.pageRotateCcwClick.bind(toolbar) }
|
|
|
|
]
|
2015-01-29 21:37:49 +09:00
|
|
|
});
|
|
|
|
}
|
2013-10-07 03:05:13 +09:00
|
|
|
|
2014-05-13 19:08:39 +09:00
|
|
|
PasswordPrompt.initialize({
|
|
|
|
overlayName: 'passwordOverlay',
|
|
|
|
passwordField: document.getElementById('password'),
|
|
|
|
passwordText: document.getElementById('passwordText'),
|
|
|
|
passwordSubmit: document.getElementById('passwordSubmit'),
|
|
|
|
passwordCancel: document.getElementById('passwordCancel')
|
|
|
|
});
|
|
|
|
|
2014-10-01 05:19:39 +09:00
|
|
|
var self = this;
|
2014-04-04 02:20:53 +09:00
|
|
|
var initializedPromise = Promise.all([
|
2014-04-27 18:55:45 +09:00
|
|
|
Preferences.get('enableWebGL').then(function resolved(value) {
|
2014-04-04 02:20:53 +09:00
|
|
|
PDFJS.disableWebGL = !value;
|
2014-05-30 07:44:41 +09:00
|
|
|
}),
|
2014-04-28 23:07:53 +09:00
|
|
|
Preferences.get('sidebarViewOnLoad').then(function resolved(value) {
|
|
|
|
self.preferenceSidebarViewOnLoad = value;
|
2014-05-30 07:44:41 +09:00
|
|
|
}),
|
2014-06-17 04:46:39 +09:00
|
|
|
Preferences.get('pdfBugEnabled').then(function resolved(value) {
|
2014-10-01 18:42:06 +09:00
|
|
|
self.preferencePdfBugEnabled = value;
|
2014-06-17 04:46:39 +09:00
|
|
|
}),
|
2015-01-28 07:57:46 +09:00
|
|
|
Preferences.get('showPreviousViewOnLoad').then(function resolved(value) {
|
|
|
|
self.preferenceShowPreviousViewOnLoad = value;
|
|
|
|
}),
|
2015-03-31 22:33:21 +09:00
|
|
|
Preferences.get('defaultZoomValue').then(function resolved(value) {
|
|
|
|
self.preferenceDefaultZoomValue = value;
|
|
|
|
}),
|
2014-05-30 07:44:41 +09:00
|
|
|
Preferences.get('disableTextLayer').then(function resolved(value) {
|
2014-06-13 02:40:59 +09:00
|
|
|
if (PDFJS.disableTextLayer === true) {
|
|
|
|
return;
|
|
|
|
}
|
2014-05-30 07:44:41 +09:00
|
|
|
PDFJS.disableTextLayer = value;
|
|
|
|
}),
|
|
|
|
Preferences.get('disableRange').then(function resolved(value) {
|
2014-06-13 02:40:59 +09:00
|
|
|
if (PDFJS.disableRange === true) {
|
|
|
|
return;
|
|
|
|
}
|
2014-05-30 07:44:41 +09:00
|
|
|
PDFJS.disableRange = value;
|
|
|
|
}),
|
|
|
|
Preferences.get('disableAutoFetch').then(function resolved(value) {
|
|
|
|
PDFJS.disableAutoFetch = value;
|
|
|
|
}),
|
|
|
|
Preferences.get('disableFontFace').then(function resolved(value) {
|
2014-06-13 02:40:59 +09:00
|
|
|
if (PDFJS.disableFontFace === true) {
|
|
|
|
return;
|
|
|
|
}
|
2014-05-30 07:44:41 +09:00
|
|
|
PDFJS.disableFontFace = value;
|
|
|
|
}),
|
|
|
|
Preferences.get('useOnlyCssZoom').then(function resolved(value) {
|
|
|
|
PDFJS.useOnlyCssZoom = value;
|
|
|
|
})
|
2014-04-04 02:20:53 +09:00
|
|
|
// TODO move more preferences and other async stuff here
|
2014-05-30 07:44:41 +09:00
|
|
|
]).catch(function (reason) { });
|
2014-04-04 02:20:53 +09:00
|
|
|
|
|
|
|
return initializedPromise.then(function () {
|
2014-09-22 20:41:17 +09:00
|
|
|
PDFViewerApplication.initialized = true;
|
2014-04-04 02:20:53 +09:00
|
|
|
});
|
2012-04-26 03:34:28 +09:00
|
|
|
},
|
2011-07-29 02:48:05 +09:00
|
|
|
|
2013-08-27 04:00:35 +09:00
|
|
|
zoomIn: function pdfViewZoomIn(ticks) {
|
2014-09-13 11:27:45 +09:00
|
|
|
var newScale = this.pdfViewer.currentScale;
|
2013-08-27 04:00:35 +09:00
|
|
|
do {
|
|
|
|
newScale = (newScale * DEFAULT_SCALE_DELTA).toFixed(2);
|
|
|
|
newScale = Math.ceil(newScale * 10) / 10;
|
|
|
|
newScale = Math.min(MAX_SCALE, newScale);
|
2015-05-14 12:27:56 +09:00
|
|
|
} while (--ticks > 0 && newScale < MAX_SCALE);
|
2013-10-16 07:26:42 +09:00
|
|
|
this.setScale(newScale, true);
|
2011-09-03 10:16:52 +09:00
|
|
|
},
|
|
|
|
|
2013-08-27 04:00:35 +09:00
|
|
|
zoomOut: function pdfViewZoomOut(ticks) {
|
2014-09-13 11:27:45 +09:00
|
|
|
var newScale = this.pdfViewer.currentScale;
|
2013-08-27 04:00:35 +09:00
|
|
|
do {
|
|
|
|
newScale = (newScale / DEFAULT_SCALE_DELTA).toFixed(2);
|
|
|
|
newScale = Math.floor(newScale * 10) / 10;
|
|
|
|
newScale = Math.max(MIN_SCALE, newScale);
|
2015-05-14 12:27:56 +09:00
|
|
|
} while (--ticks > 0 && newScale > MIN_SCALE);
|
2013-10-16 07:26:42 +09:00
|
|
|
this.setScale(newScale, true);
|
2011-09-03 10:16:52 +09:00
|
|
|
},
|
|
|
|
|
2014-09-13 11:27:45 +09:00
|
|
|
get currentScaleValue() {
|
|
|
|
return this.pdfViewer.currentScaleValue;
|
|
|
|
},
|
2011-08-09 05:13:32 +09:00
|
|
|
|
2014-09-13 11:27:45 +09:00
|
|
|
get pagesCount() {
|
|
|
|
return this.pdfDocument.numPages;
|
|
|
|
},
|
2011-10-15 11:05:57 +09:00
|
|
|
|
2014-09-13 11:27:45 +09:00
|
|
|
set page(val) {
|
2015-04-28 00:25:32 +09:00
|
|
|
this.pdfLinkService.page = val;
|
2011-07-29 02:48:05 +09:00
|
|
|
},
|
|
|
|
|
2015-04-28 00:25:32 +09:00
|
|
|
get page() { // TODO remove
|
|
|
|
return this.pdfLinkService.page;
|
2011-07-29 02:48:05 +09:00
|
|
|
},
|
|
|
|
|
2012-06-29 01:50:25 +09:00
|
|
|
get supportsPrinting() {
|
|
|
|
var canvas = document.createElement('canvas');
|
2012-07-13 02:31:20 +09:00
|
|
|
var value = 'mozPrintCallback' in canvas;
|
2015-02-01 06:43:30 +09:00
|
|
|
|
|
|
|
return PDFJS.shadow(this, 'supportsPrinting', value);
|
2012-06-29 01:50:25 +09:00
|
|
|
},
|
|
|
|
|
2012-07-31 00:12:49 +09:00
|
|
|
get supportsFullscreen() {
|
|
|
|
var doc = document.documentElement;
|
2015-02-01 19:31:18 +09:00
|
|
|
var support = !!(doc.requestFullscreen || doc.mozRequestFullScreen ||
|
|
|
|
doc.webkitRequestFullScreen || doc.msRequestFullscreen);
|
2012-11-10 22:59:25 +09:00
|
|
|
|
2013-06-06 01:01:09 +09:00
|
|
|
if (document.fullscreenEnabled === false ||
|
|
|
|
document.mozFullScreenEnabled === false ||
|
2013-09-11 04:40:14 +09:00
|
|
|
document.webkitFullscreenEnabled === false ||
|
|
|
|
document.msFullscreenEnabled === false) {
|
2012-11-10 22:59:25 +09:00
|
|
|
support = false;
|
2013-03-02 05:54:02 +09:00
|
|
|
}
|
2014-12-03 23:38:25 +09:00
|
|
|
if (support && PDFJS.disableFullscreen === true) {
|
|
|
|
support = false;
|
|
|
|
}
|
2012-11-10 22:59:25 +09:00
|
|
|
|
2015-02-01 06:43:30 +09:00
|
|
|
return PDFJS.shadow(this, 'supportsFullscreen', support);
|
2012-07-31 00:12:49 +09:00
|
|
|
},
|
|
|
|
|
2012-10-06 05:59:13 +09:00
|
|
|
get supportsIntegratedFind() {
|
|
|
|
var support = false;
|
2015-02-01 06:45:20 +09:00
|
|
|
//#if (FIREFOX || MOZCENTRAL)
|
2012-10-06 05:59:13 +09:00
|
|
|
// support = FirefoxCom.requestSync('supportsIntegratedFind');
|
|
|
|
//#endif
|
2015-02-01 06:43:30 +09:00
|
|
|
|
|
|
|
return PDFJS.shadow(this, 'supportsIntegratedFind', support);
|
2012-10-06 05:59:13 +09:00
|
|
|
},
|
|
|
|
|
2012-12-01 07:59:51 +09:00
|
|
|
get supportsDocumentFonts() {
|
|
|
|
var support = true;
|
2015-02-01 06:45:20 +09:00
|
|
|
//#if (FIREFOX || MOZCENTRAL)
|
2012-12-01 07:59:51 +09:00
|
|
|
// support = FirefoxCom.requestSync('supportsDocumentFonts');
|
|
|
|
//#endif
|
2015-02-01 06:43:30 +09:00
|
|
|
|
|
|
|
return PDFJS.shadow(this, 'supportsDocumentFonts', support);
|
2012-12-01 07:59:51 +09:00
|
|
|
},
|
|
|
|
|
2013-04-04 01:49:03 +09:00
|
|
|
get supportsDocumentColors() {
|
|
|
|
var support = true;
|
2015-02-01 06:45:20 +09:00
|
|
|
//#if (FIREFOX || MOZCENTRAL)
|
2013-04-04 01:49:03 +09:00
|
|
|
// support = FirefoxCom.requestSync('supportsDocumentColors');
|
|
|
|
//#endif
|
2015-02-01 06:43:30 +09:00
|
|
|
|
|
|
|
return PDFJS.shadow(this, 'supportsDocumentColors', support);
|
2013-04-04 01:49:03 +09:00
|
|
|
},
|
|
|
|
|
2013-07-19 01:28:59 +09:00
|
|
|
get loadingBar() {
|
|
|
|
var bar = new ProgressBar('#loadingBar', {});
|
2015-02-01 06:43:30 +09:00
|
|
|
|
|
|
|
return PDFJS.shadow(this, 'loadingBar', bar);
|
2013-07-19 01:28:59 +09:00
|
|
|
},
|
|
|
|
|
2014-01-26 20:55:48 +09:00
|
|
|
//#if (FIREFOX || MOZCENTRAL)
|
2012-08-01 02:21:07 +09:00
|
|
|
initPassiveLoading: function pdfViewInitPassiveLoading() {
|
2015-01-06 12:45:01 +09:00
|
|
|
function FirefoxComDataRangeTransport(length, initialData) {
|
|
|
|
PDFJS.PDFDataRangeTransport.call(this, length, initialData);
|
|
|
|
}
|
|
|
|
FirefoxComDataRangeTransport.prototype =
|
|
|
|
Object.create(PDFJS.PDFDataRangeTransport.prototype);
|
|
|
|
FirefoxComDataRangeTransport.prototype.requestDataRange =
|
|
|
|
function FirefoxComDataRangeTransport_requestDataRange(begin, end) {
|
|
|
|
FirefoxCom.request('requestDataRange', { begin: begin, end: end });
|
2013-02-07 08:19:29 +09:00
|
|
|
};
|
|
|
|
|
2015-01-06 12:45:01 +09:00
|
|
|
var pdfDataRangeTransport;
|
|
|
|
|
2013-02-07 08:19:29 +09:00
|
|
|
window.addEventListener('message', function windowMessage(e) {
|
2014-01-26 20:55:48 +09:00
|
|
|
if (e.source !== null) {
|
|
|
|
// The message MUST originate from Chrome code.
|
|
|
|
console.warn('Rejected untrusted message from ' + e.origin);
|
|
|
|
return;
|
|
|
|
}
|
2012-08-01 02:21:07 +09:00
|
|
|
var args = e.data;
|
|
|
|
|
2014-03-09 20:20:32 +09:00
|
|
|
if (typeof args !== 'object' || !('pdfjsLoadAction' in args)) {
|
2012-08-01 02:21:07 +09:00
|
|
|
return;
|
2014-03-09 20:20:32 +09:00
|
|
|
}
|
2012-08-01 02:21:07 +09:00
|
|
|
switch (args.pdfjsLoadAction) {
|
2013-02-07 08:19:29 +09:00
|
|
|
case 'supportsRangedLoading':
|
2015-01-06 12:45:01 +09:00
|
|
|
pdfDataRangeTransport =
|
|
|
|
new FirefoxComDataRangeTransport(args.length, args.data);
|
|
|
|
|
2014-09-22 20:41:17 +09:00
|
|
|
PDFViewerApplication.open(args.pdfUrl, 0, undefined,
|
2015-01-06 12:45:01 +09:00
|
|
|
pdfDataRangeTransport);
|
2015-01-13 17:38:34 +09:00
|
|
|
|
|
|
|
if (args.length) {
|
2015-04-25 03:47:38 +09:00
|
|
|
PDFViewerApplication.pdfDocumentProperties
|
|
|
|
.setFileSize(args.length);
|
2015-01-13 17:38:34 +09:00
|
|
|
}
|
2013-02-07 08:19:29 +09:00
|
|
|
break;
|
|
|
|
case 'range':
|
|
|
|
pdfDataRangeTransport.onDataRange(args.begin, args.chunk);
|
|
|
|
break;
|
2013-04-20 05:53:22 +09:00
|
|
|
case 'rangeProgress':
|
|
|
|
pdfDataRangeTransport.onDataProgress(args.loaded);
|
|
|
|
break;
|
2014-09-06 10:02:54 +09:00
|
|
|
case 'progressiveRead':
|
|
|
|
pdfDataRangeTransport.onDataProgressiveRead(args.chunk);
|
|
|
|
break;
|
2012-08-01 02:21:07 +09:00
|
|
|
case 'progress':
|
2014-09-22 20:41:17 +09:00
|
|
|
PDFViewerApplication.progress(args.loaded / args.total);
|
2012-08-01 02:21:07 +09:00
|
|
|
break;
|
|
|
|
case 'complete':
|
2012-08-21 07:16:04 +09:00
|
|
|
if (!args.data) {
|
2014-09-22 20:41:17 +09:00
|
|
|
PDFViewerApplication.error(mozL10n.get('loading_error', null,
|
|
|
|
'An error occurred while loading the PDF.'), e);
|
2012-08-21 07:16:04 +09:00
|
|
|
break;
|
|
|
|
}
|
2014-09-22 20:41:17 +09:00
|
|
|
PDFViewerApplication.open(args.data, 0);
|
2012-08-01 02:21:07 +09:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
FirefoxCom.requestSync('initPassiveLoading', null);
|
|
|
|
},
|
2014-01-26 20:55:48 +09:00
|
|
|
//#endif
|
2012-08-01 02:21:07 +09:00
|
|
|
|
|
|
|
setTitleUsingUrl: function pdfViewSetTitleUsingUrl(url) {
|
|
|
|
this.url = url;
|
2012-08-27 08:49:07 +09:00
|
|
|
try {
|
2012-11-29 04:02:56 +09:00
|
|
|
this.setTitle(decodeURIComponent(getFileName(url)) || url);
|
2012-08-27 16:02:10 +09:00
|
|
|
} catch (e) {
|
|
|
|
// decodeURIComponent may throw URIError,
|
|
|
|
// fall back to using the unprocessed url in that case
|
2012-11-29 04:02:56 +09:00
|
|
|
this.setTitle(url);
|
2012-08-27 08:49:07 +09:00
|
|
|
}
|
2012-08-01 02:21:07 +09:00
|
|
|
},
|
|
|
|
|
2012-11-29 04:02:56 +09:00
|
|
|
setTitle: function pdfViewSetTitle(title) {
|
2015-03-06 12:36:08 +09:00
|
|
|
if (this.isViewerEmbedded) {
|
|
|
|
// Embedded PDF viewers should not be changing their parent page's title.
|
|
|
|
return;
|
|
|
|
}
|
2012-11-29 04:02:56 +09:00
|
|
|
document.title = title;
|
|
|
|
//#if B2G
|
|
|
|
// document.getElementById('activityTitle').textContent = title;
|
|
|
|
//#endif
|
|
|
|
},
|
|
|
|
|
2014-03-27 05:18:53 +09:00
|
|
|
close: function pdfViewClose() {
|
2014-04-15 19:00:46 +09:00
|
|
|
var errorWrapper = document.getElementById('errorWrapper');
|
|
|
|
errorWrapper.setAttribute('hidden', 'true');
|
|
|
|
|
2014-03-27 05:18:53 +09:00
|
|
|
if (!this.pdfDocument) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
this.pdfDocument.destroy();
|
|
|
|
this.pdfDocument = null;
|
|
|
|
|
2014-09-15 23:49:24 +09:00
|
|
|
this.pdfThumbnailViewer.setDocument(null);
|
|
|
|
this.pdfViewer.setDocument(null);
|
2015-04-28 00:25:32 +09:00
|
|
|
this.pdfLinkService.setDocument(null, null);
|
2014-03-27 05:18:53 +09:00
|
|
|
|
|
|
|
if (typeof PDFBug !== 'undefined') {
|
|
|
|
PDFBug.cleanup();
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
2013-02-07 08:19:29 +09:00
|
|
|
// TODO(mack): This function signature should really be pdfViewOpen(url, args)
|
2014-09-10 15:17:19 +09:00
|
|
|
open: function pdfViewOpen(file, scale, password,
|
2013-02-07 08:19:29 +09:00
|
|
|
pdfDataRangeTransport, args) {
|
2014-03-27 05:18:53 +09:00
|
|
|
if (this.pdfDocument) {
|
2014-03-17 06:33:39 +09:00
|
|
|
// Reload the preferences if a document was previously opened.
|
|
|
|
Preferences.reload();
|
2014-03-27 05:18:53 +09:00
|
|
|
}
|
2014-04-15 19:00:46 +09:00
|
|
|
this.close();
|
2014-03-27 05:18:53 +09:00
|
|
|
|
2012-05-15 03:45:07 +09:00
|
|
|
var parameters = {password: password};
|
2014-09-10 15:17:19 +09:00
|
|
|
if (typeof file === 'string') { // URL
|
|
|
|
this.setTitleUsingUrl(file);
|
|
|
|
parameters.url = file;
|
|
|
|
} else if (file && 'byteLength' in file) { // ArrayBuffer
|
|
|
|
parameters.data = file;
|
|
|
|
} else if (file.url && file.originalUrl) {
|
|
|
|
this.setTitleUsingUrl(file.originalUrl);
|
|
|
|
parameters.url = file.url;
|
2012-05-15 03:45:07 +09:00
|
|
|
}
|
2013-02-07 08:19:29 +09:00
|
|
|
if (args) {
|
|
|
|
for (var prop in args) {
|
|
|
|
parameters[prop] = args[prop];
|
|
|
|
}
|
|
|
|
}
|
2011-07-29 02:48:05 +09:00
|
|
|
|
2011-10-20 05:14:34 +09:00
|
|
|
var self = this;
|
2012-04-10 14:20:57 +09:00
|
|
|
self.loading = true;
|
2014-03-14 12:23:47 +09:00
|
|
|
self.downloadComplete = false;
|
|
|
|
|
2013-05-10 07:35:23 +09:00
|
|
|
var passwordNeeded = function passwordNeeded(updatePassword, reason) {
|
2013-09-25 00:46:54 +09:00
|
|
|
PasswordPrompt.updatePassword = updatePassword;
|
|
|
|
PasswordPrompt.reason = reason;
|
2014-05-13 19:08:39 +09:00
|
|
|
PasswordPrompt.open();
|
2013-05-10 07:35:23 +09:00
|
|
|
};
|
|
|
|
|
2013-06-06 04:28:31 +09:00
|
|
|
function getDocumentProgress(progressData) {
|
|
|
|
self.progress(progressData.loaded / progressData.total);
|
|
|
|
}
|
|
|
|
|
|
|
|
PDFJS.getDocument(parameters, pdfDataRangeTransport, passwordNeeded,
|
|
|
|
getDocumentProgress).then(
|
2012-04-10 14:20:57 +09:00
|
|
|
function getDocumentCallback(pdfDocument) {
|
|
|
|
self.load(pdfDocument, scale);
|
|
|
|
self.loading = false;
|
2011-09-28 20:21:07 +09:00
|
|
|
},
|
2014-08-23 23:03:49 +09:00
|
|
|
function getDocumentError(exception) {
|
2014-09-09 05:32:14 +09:00
|
|
|
var message = exception && exception.message;
|
2012-10-16 19:10:37 +09:00
|
|
|
var loadingErrorMessage = mozL10n.get('loading_error', null,
|
|
|
|
'An error occurred while loading the PDF.');
|
|
|
|
|
2014-09-09 05:32:14 +09:00
|
|
|
if (exception instanceof PDFJS.InvalidPDFException) {
|
2012-10-16 19:10:37 +09:00
|
|
|
// change error message also for other builds
|
2014-04-08 05:34:03 +09:00
|
|
|
loadingErrorMessage = mozL10n.get('invalid_file_error', null,
|
2014-08-23 23:03:49 +09:00
|
|
|
'Invalid or corrupted PDF file.');
|
2014-09-09 05:32:14 +09:00
|
|
|
} else if (exception instanceof PDFJS.MissingPDFException) {
|
2013-01-30 03:13:28 +09:00
|
|
|
// special message for missing PDF's
|
2014-04-08 05:34:03 +09:00
|
|
|
loadingErrorMessage = mozL10n.get('missing_file_error', null,
|
2014-08-23 23:03:49 +09:00
|
|
|
'Missing PDF file.');
|
2014-09-13 23:47:16 +09:00
|
|
|
} else if (exception instanceof PDFJS.UnexpectedResponseException) {
|
|
|
|
loadingErrorMessage = mozL10n.get('unexpected_response_error', null,
|
|
|
|
'Unexpected server response.');
|
|
|
|
}
|
2013-01-30 03:13:28 +09:00
|
|
|
//#if B2G
|
2014-09-13 23:47:16 +09:00
|
|
|
// window.alert(loadingErrorMessage);
|
|
|
|
// return window.close();
|
2013-01-30 03:13:28 +09:00
|
|
|
//#endif
|
|
|
|
|
2012-04-10 14:20:57 +09:00
|
|
|
var moreInfo = {
|
|
|
|
message: message
|
|
|
|
};
|
2012-10-16 19:10:37 +09:00
|
|
|
self.error(loadingErrorMessage, moreInfo);
|
2011-10-20 05:14:34 +09:00
|
|
|
self.loading = false;
|
2012-04-10 14:20:57 +09:00
|
|
|
}
|
|
|
|
);
|
2014-08-11 22:25:37 +09:00
|
|
|
|
|
|
|
if (args && args.length) {
|
2015-04-25 03:47:38 +09:00
|
|
|
PDFViewerApplication.pdfDocumentProperties.setFileSize(args.length);
|
2014-08-11 22:25:37 +09:00
|
|
|
}
|
2011-07-29 02:48:05 +09:00
|
|
|
},
|
|
|
|
|
2011-10-19 13:29:14 +09:00
|
|
|
download: function pdfViewDownload() {
|
2014-03-14 12:23:47 +09:00
|
|
|
function downloadByUrl() {
|
2013-07-13 03:14:13 +09:00
|
|
|
downloadManager.downloadUrl(url, filename);
|
2013-03-25 02:25:57 +09:00
|
|
|
}
|
2013-07-13 03:14:13 +09:00
|
|
|
|
|
|
|
var url = this.url.split('#')[0];
|
|
|
|
var filename = getPDFFileNameFromURL(url);
|
|
|
|
var downloadManager = new DownloadManager();
|
|
|
|
downloadManager.onerror = function (err) {
|
|
|
|
// This error won't really be helpful because it's likely the
|
|
|
|
// fallback won't work either (or is already open).
|
2014-09-22 20:41:17 +09:00
|
|
|
PDFViewerApplication.error('PDF failed to download.');
|
2013-07-13 03:14:13 +09:00
|
|
|
};
|
|
|
|
|
|
|
|
if (!this.pdfDocument) { // the PDF is not ready yet
|
2014-03-14 12:23:47 +09:00
|
|
|
downloadByUrl();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!this.downloadComplete) { // the PDF is still downloading
|
|
|
|
downloadByUrl();
|
2013-07-13 03:14:13 +09:00
|
|
|
return;
|
2013-07-03 00:15:32 +09:00
|
|
|
}
|
2013-07-13 03:14:13 +09:00
|
|
|
|
2013-07-03 00:15:32 +09:00
|
|
|
this.pdfDocument.getData().then(
|
|
|
|
function getDataSuccess(data) {
|
2013-09-01 23:45:26 +09:00
|
|
|
var blob = PDFJS.createBlob(data, 'application/pdf');
|
2013-07-13 03:14:13 +09:00
|
|
|
downloadManager.download(blob, url, filename);
|
2013-07-03 00:15:32 +09:00
|
|
|
},
|
2014-03-14 12:23:47 +09:00
|
|
|
downloadByUrl // Error occurred try downloading with just the url.
|
|
|
|
).then(null, downloadByUrl);
|
2011-10-19 13:29:14 +09:00
|
|
|
},
|
|
|
|
|
2014-01-04 02:34:13 +09:00
|
|
|
fallback: function pdfViewFallback(featureId) {
|
2015-04-30 02:09:58 +09:00
|
|
|
//#if !PRODUCTION
|
|
|
|
if (true) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
//#endif
|
|
|
|
//#if (FIREFOX || MOZCENTRAL)
|
2015-04-26 08:49:37 +09:00
|
|
|
// Only trigger the fallback once so we don't spam the user with messages
|
|
|
|
// for one PDF.
|
|
|
|
if (this.fellback) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
this.fellback = true;
|
|
|
|
var url = this.url.split('#')[0];
|
|
|
|
FirefoxCom.request('fallback', { featureId: featureId, url: url },
|
|
|
|
function response(download) {
|
|
|
|
if (!download) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
PDFViewerApplication.download();
|
|
|
|
});
|
2012-08-02 03:29:13 +09:00
|
|
|
//#endif
|
2012-05-11 07:54:58 +09:00
|
|
|
},
|
|
|
|
|
2011-11-30 04:28:05 +09:00
|
|
|
/**
|
|
|
|
* Show the error box.
|
|
|
|
* @param {String} message A message that is human readable.
|
|
|
|
* @param {Object} moreInfo (optional) Further information about the error
|
|
|
|
* that is more technical. Should have a 'message'
|
|
|
|
* and optionally a 'stack' property.
|
|
|
|
*/
|
|
|
|
error: function pdfViewError(message, moreInfo) {
|
2013-01-05 02:01:31 +09:00
|
|
|
var moreInfoText = mozL10n.get('error_version_info',
|
|
|
|
{version: PDFJS.version || '?', build: PDFJS.build || '?'},
|
|
|
|
'PDF.js v{{version}} (build: {{build}})') + '\n';
|
2012-05-15 09:19:09 +09:00
|
|
|
if (moreInfo) {
|
|
|
|
moreInfoText +=
|
|
|
|
mozL10n.get('error_message', {message: moreInfo.message},
|
|
|
|
'Message: {{message}}');
|
|
|
|
if (moreInfo.stack) {
|
|
|
|
moreInfoText += '\n' +
|
|
|
|
mozL10n.get('error_stack', {stack: moreInfo.stack},
|
|
|
|
'Stack: {{stack}}');
|
|
|
|
} else {
|
|
|
|
if (moreInfo.filename) {
|
|
|
|
moreInfoText += '\n' +
|
|
|
|
mozL10n.get('error_file', {file: moreInfo.filename},
|
|
|
|
'File: {{file}}');
|
|
|
|
}
|
|
|
|
if (moreInfo.lineNumber) {
|
|
|
|
moreInfoText += '\n' +
|
|
|
|
mozL10n.get('error_line', {line: moreInfo.lineNumber},
|
|
|
|
'Line: {{line}}');
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2012-08-23 00:48:56 +09:00
|
|
|
|
2012-08-02 03:29:13 +09:00
|
|
|
//#if !(FIREFOX || MOZCENTRAL)
|
2011-11-29 09:55:09 +09:00
|
|
|
var errorWrapper = document.getElementById('errorWrapper');
|
|
|
|
errorWrapper.removeAttribute('hidden');
|
|
|
|
|
|
|
|
var errorMessage = document.getElementById('errorMessage');
|
2012-01-21 07:48:57 +09:00
|
|
|
errorMessage.textContent = message;
|
2011-11-29 09:55:09 +09:00
|
|
|
|
2011-11-30 04:28:05 +09:00
|
|
|
var closeButton = document.getElementById('errorClose');
|
|
|
|
closeButton.onclick = function() {
|
|
|
|
errorWrapper.setAttribute('hidden', 'true');
|
|
|
|
};
|
|
|
|
|
|
|
|
var errorMoreInfo = document.getElementById('errorMoreInfo');
|
|
|
|
var moreInfoButton = document.getElementById('errorShowMore');
|
|
|
|
var lessInfoButton = document.getElementById('errorShowLess');
|
|
|
|
moreInfoButton.onclick = function() {
|
|
|
|
errorMoreInfo.removeAttribute('hidden');
|
|
|
|
moreInfoButton.setAttribute('hidden', 'true');
|
|
|
|
lessInfoButton.removeAttribute('hidden');
|
2013-07-18 07:40:15 +09:00
|
|
|
errorMoreInfo.style.height = errorMoreInfo.scrollHeight + 'px';
|
2011-11-30 04:28:05 +09:00
|
|
|
};
|
|
|
|
lessInfoButton.onclick = function() {
|
|
|
|
errorMoreInfo.setAttribute('hidden', 'true');
|
2011-11-29 09:55:09 +09:00
|
|
|
moreInfoButton.removeAttribute('hidden');
|
2011-11-30 04:28:05 +09:00
|
|
|
lessInfoButton.setAttribute('hidden', 'true');
|
|
|
|
};
|
2013-07-31 06:36:45 +09:00
|
|
|
moreInfoButton.oncontextmenu = noContextMenuHandler;
|
|
|
|
lessInfoButton.oncontextmenu = noContextMenuHandler;
|
|
|
|
closeButton.oncontextmenu = noContextMenuHandler;
|
2011-11-30 04:28:05 +09:00
|
|
|
moreInfoButton.removeAttribute('hidden');
|
|
|
|
lessInfoButton.setAttribute('hidden', 'true');
|
2012-05-15 09:19:09 +09:00
|
|
|
errorMoreInfo.value = moreInfoText;
|
2012-08-02 03:29:13 +09:00
|
|
|
//#else
|
|
|
|
// console.error(message + '\n' + moreInfoText);
|
|
|
|
// this.fallback();
|
|
|
|
//#endif
|
2011-09-28 19:53:53 +09:00
|
|
|
},
|
|
|
|
|
2011-10-05 04:21:40 +09:00
|
|
|
progress: function pdfViewProgress(level) {
|
2011-09-28 19:53:53 +09:00
|
|
|
var percent = Math.round(level * 100);
|
2013-04-24 02:00:31 +09:00
|
|
|
// When we transition from full request to range requests, it's possible
|
|
|
|
// that we discard some of the loaded data. This can cause the loading
|
|
|
|
// bar to move backwards. So prevent this by only updating the bar if it
|
|
|
|
// increases.
|
2014-09-22 20:41:17 +09:00
|
|
|
if (percent > this.loadingBar.percent || isNaN(percent)) {
|
|
|
|
this.loadingBar.percent = percent;
|
2014-08-17 08:06:03 +09:00
|
|
|
|
|
|
|
// When disableAutoFetch is enabled, it's not uncommon for the entire file
|
|
|
|
// to never be fetched (depends on e.g. the file structure). In this case
|
|
|
|
// the loading bar will not be completely filled, nor will it be hidden.
|
|
|
|
// To prevent displaying a partially filled loading bar permanently, we
|
|
|
|
// hide it when no data has been loaded during a certain amount of time.
|
|
|
|
if (PDFJS.disableAutoFetch && percent) {
|
|
|
|
if (this.disableAutoFetchLoadingBarTimeout) {
|
|
|
|
clearTimeout(this.disableAutoFetchLoadingBarTimeout);
|
|
|
|
this.disableAutoFetchLoadingBarTimeout = null;
|
|
|
|
}
|
|
|
|
this.loadingBar.show();
|
|
|
|
|
|
|
|
this.disableAutoFetchLoadingBarTimeout = setTimeout(function () {
|
|
|
|
this.loadingBar.hide();
|
|
|
|
this.disableAutoFetchLoadingBarTimeout = null;
|
|
|
|
}.bind(this), DISABLE_AUTO_FETCH_LOADING_BAR_TIMEOUT);
|
|
|
|
}
|
2013-04-24 02:00:31 +09:00
|
|
|
}
|
2011-09-28 19:53:53 +09:00
|
|
|
},
|
|
|
|
|
2012-04-10 14:20:57 +09:00
|
|
|
load: function pdfViewLoad(pdfDocument, scale) {
|
2013-11-27 06:55:50 +09:00
|
|
|
var self = this;
|
2014-09-21 02:15:18 +09:00
|
|
|
scale = scale || UNKNOWN_SCALE;
|
2011-11-25 03:53:11 +09:00
|
|
|
|
2014-09-22 20:41:17 +09:00
|
|
|
this.findController.reset();
|
2013-08-23 03:03:51 +09:00
|
|
|
|
2012-06-02 06:17:09 +09:00
|
|
|
this.pdfDocument = pdfDocument;
|
|
|
|
|
2015-04-25 04:01:03 +09:00
|
|
|
this.pdfDocumentProperties.setDocumentAndUrl(pdfDocument, this.url);
|
2014-04-01 06:12:48 +09:00
|
|
|
|
2014-04-14 11:07:36 +09:00
|
|
|
var downloadedPromise = pdfDocument.getDownloadInfo().then(function() {
|
2014-03-14 12:23:47 +09:00
|
|
|
self.downloadComplete = true;
|
2014-09-22 20:41:17 +09:00
|
|
|
self.loadingBar.hide();
|
2013-02-07 08:19:29 +09:00
|
|
|
});
|
2011-09-28 19:53:53 +09:00
|
|
|
|
2012-04-10 14:20:57 +09:00
|
|
|
var pagesCount = pdfDocument.numPages;
|
2012-05-01 08:32:37 +09:00
|
|
|
document.getElementById('numPages').textContent =
|
2012-05-04 22:37:08 +09:00
|
|
|
mozL10n.get('page_of', {pageCount: pagesCount}, 'of {{pageCount}}');
|
2011-10-02 05:52:27 +09:00
|
|
|
document.getElementById('pageNumber').max = pagesCount;
|
2012-10-11 02:26:41 +09:00
|
|
|
|
2014-07-18 20:53:04 +09:00
|
|
|
var id = this.documentFingerprint = pdfDocument.fingerprint;
|
2014-09-22 20:41:17 +09:00
|
|
|
var store = this.store = new ViewHistory(id);
|
2011-07-29 02:48:05 +09:00
|
|
|
|
2015-04-28 00:25:32 +09:00
|
|
|
//#if (GENERIC || B2G)
|
|
|
|
var baseDocumentUrl = null;
|
|
|
|
//#endif
|
|
|
|
//#if (FIREFOX || MOZCENTRAL)
|
|
|
|
// var baseDocumentUrl = this.url.split('#')[0];
|
|
|
|
//#endif
|
|
|
|
//#if CHROME
|
|
|
|
// var baseDocumentUrl = location.href.split('#')[0];
|
|
|
|
//#endif
|
|
|
|
this.pdfLinkService.setDocument(pdfDocument, baseDocumentUrl);
|
|
|
|
|
2014-09-15 23:49:24 +09:00
|
|
|
var pdfViewer = this.pdfViewer;
|
|
|
|
pdfViewer.currentScale = scale;
|
|
|
|
pdfViewer.setDocument(pdfDocument);
|
|
|
|
var firstPagePromise = pdfViewer.firstPagePromise;
|
|
|
|
var pagesPromise = pdfViewer.pagesPromise;
|
|
|
|
var onePageRendered = pdfViewer.onePageRendered;
|
2012-09-08 08:05:14 +09:00
|
|
|
|
2014-09-15 23:49:24 +09:00
|
|
|
this.pageRotation = 0;
|
2014-09-22 20:41:17 +09:00
|
|
|
this.isInitialViewSet = false;
|
2013-03-09 11:08:37 +09:00
|
|
|
|
2014-09-15 23:49:24 +09:00
|
|
|
this.pdfThumbnailViewer.setDocument(pdfDocument);
|
2012-04-10 14:20:57 +09:00
|
|
|
|
2013-03-09 11:08:37 +09:00
|
|
|
firstPagePromise.then(function(pdfPage) {
|
2014-04-14 11:07:36 +09:00
|
|
|
downloadedPromise.then(function () {
|
|
|
|
var event = document.createEvent('CustomEvent');
|
|
|
|
event.initCustomEvent('documentload', true, true, {});
|
|
|
|
window.dispatchEvent(event);
|
|
|
|
});
|
2013-03-09 11:08:37 +09:00
|
|
|
|
2014-09-22 20:41:17 +09:00
|
|
|
self.loadingBar.setWidth(document.getElementById('viewer'));
|
2013-07-19 01:28:59 +09:00
|
|
|
|
2014-09-22 20:41:17 +09:00
|
|
|
if (!PDFJS.disableHistory && !self.isViewerEmbedded) {
|
|
|
|
// The browsing history is only enabled when the viewer is standalone,
|
|
|
|
// i.e. not when it is embedded in a web page.
|
2015-03-10 23:22:32 +09:00
|
|
|
if (!self.preferenceShowPreviousViewOnLoad) {
|
|
|
|
PDFHistory.clearHistoryState();
|
2015-04-01 00:14:08 +09:00
|
|
|
}
|
2015-04-27 23:04:11 +09:00
|
|
|
self.pdfHistory.initialize(self.documentFingerprint);
|
2015-06-04 20:58:45 +09:00
|
|
|
|
|
|
|
if (self.pdfHistory.initialDestination) {
|
|
|
|
self.initialDestination = self.pdfHistory.initialDestination;
|
|
|
|
} else if (self.pdfHistory.initialBookmark) {
|
|
|
|
self.initialBookmark = self.pdfHistory.initialBookmark;
|
|
|
|
}
|
2014-09-22 20:41:17 +09:00
|
|
|
}
|
2013-03-09 11:08:37 +09:00
|
|
|
|
2015-04-01 01:17:56 +09:00
|
|
|
store.initializedPromise.then(function resolved() {
|
|
|
|
var storedHash = null;
|
|
|
|
if (self.preferenceShowPreviousViewOnLoad &&
|
|
|
|
store.get('exists', false)) {
|
|
|
|
var pageNum = store.get('page', '1');
|
|
|
|
var zoom = self.preferenceDefaultZoomValue ||
|
|
|
|
store.get('zoom', self.pdfViewer.currentScale);
|
|
|
|
var left = store.get('scrollLeft', '0');
|
|
|
|
var top = store.get('scrollTop', '0');
|
|
|
|
|
|
|
|
storedHash = 'page=' + pageNum + '&zoom=' + zoom + ',' +
|
|
|
|
left + ',' + top;
|
|
|
|
} else if (self.preferenceDefaultZoomValue) {
|
|
|
|
storedHash = 'page=1&zoom=' + self.preferenceDefaultZoomValue;
|
|
|
|
}
|
|
|
|
self.setInitialView(storedHash, scale);
|
2013-04-30 23:44:51 +09:00
|
|
|
|
2015-04-01 01:17:56 +09:00
|
|
|
// Make all navigation keys work on document load,
|
|
|
|
// unless the viewer is embedded in a web page.
|
|
|
|
if (!self.isViewerEmbedded) {
|
|
|
|
self.pdfViewer.focus();
|
|
|
|
}
|
|
|
|
}, function rejected(reason) {
|
|
|
|
console.error(reason);
|
2014-03-17 06:33:39 +09:00
|
|
|
self.setInitialView(null, scale);
|
|
|
|
});
|
2013-03-09 11:08:37 +09:00
|
|
|
});
|
|
|
|
|
|
|
|
pagesPromise.then(function() {
|
2014-09-22 20:41:17 +09:00
|
|
|
if (self.supportsPrinting) {
|
2013-03-01 08:29:07 +09:00
|
|
|
pdfDocument.getJavaScript().then(function(javaScript) {
|
|
|
|
if (javaScript.length) {
|
2013-03-17 00:13:08 +09:00
|
|
|
console.warn('Warning: JavaScript is not supported');
|
2014-09-22 20:41:17 +09:00
|
|
|
self.fallback(PDFJS.UNSUPPORTED_FEATURES.javaScript);
|
2013-03-01 08:29:07 +09:00
|
|
|
}
|
|
|
|
// Hack to support auto printing.
|
|
|
|
var regex = /\bprint\s*\(/g;
|
|
|
|
for (var i = 0, ii = javaScript.length; i < ii; i++) {
|
|
|
|
var js = javaScript[i];
|
|
|
|
if (js && regex.test(js)) {
|
|
|
|
setTimeout(function() {
|
|
|
|
window.print();
|
|
|
|
});
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
2012-04-10 14:20:57 +09:00
|
|
|
});
|
2011-12-01 10:04:45 +09:00
|
|
|
|
2014-10-05 22:56:40 +09:00
|
|
|
// outline depends on pagesRefMap
|
|
|
|
var promises = [pagesPromise, this.animationStartedPromise];
|
2014-01-04 09:17:05 +09:00
|
|
|
Promise.all(promises).then(function() {
|
2012-04-10 14:20:57 +09:00
|
|
|
pdfDocument.getOutline().then(function(outline) {
|
2015-01-28 06:51:39 +09:00
|
|
|
var container = document.getElementById('outlineView');
|
2015-01-28 06:40:12 +09:00
|
|
|
self.outline = new PDFOutlineView({
|
2015-01-28 06:51:39 +09:00
|
|
|
container: container,
|
2014-09-22 20:41:17 +09:00
|
|
|
outline: outline,
|
2015-04-28 00:25:32 +09:00
|
|
|
linkService: self.pdfLinkService
|
2014-09-22 20:41:17 +09:00
|
|
|
});
|
2015-01-28 06:51:39 +09:00
|
|
|
self.outline.render();
|
2013-04-06 23:01:44 +09:00
|
|
|
document.getElementById('viewOutline').disabled = !outline;
|
2013-11-19 07:51:06 +09:00
|
|
|
|
2015-01-28 06:51:39 +09:00
|
|
|
if (!outline && !container.classList.contains('hidden')) {
|
2014-09-22 20:41:17 +09:00
|
|
|
self.switchSidebarView('thumbs');
|
|
|
|
}
|
2014-04-28 23:07:53 +09:00
|
|
|
if (outline &&
|
|
|
|
self.preferenceSidebarViewOnLoad === SidebarView.OUTLINE) {
|
|
|
|
self.switchSidebarView('outline', true);
|
2013-11-19 07:51:06 +09:00
|
|
|
}
|
2012-04-10 14:20:57 +09:00
|
|
|
});
|
2014-03-19 05:32:47 +09:00
|
|
|
pdfDocument.getAttachments().then(function(attachments) {
|
2015-01-28 06:06:19 +09:00
|
|
|
var container = document.getElementById('attachmentsView');
|
2015-01-28 05:52:14 +09:00
|
|
|
self.attachments = new PDFAttachmentView({
|
2015-01-28 06:06:19 +09:00
|
|
|
container: container,
|
2015-01-28 06:11:04 +09:00
|
|
|
attachments: attachments,
|
|
|
|
downloadManager: new DownloadManager()
|
2014-09-22 20:41:17 +09:00
|
|
|
});
|
2015-01-28 06:06:19 +09:00
|
|
|
self.attachments.render();
|
2014-03-19 05:32:47 +09:00
|
|
|
document.getElementById('viewAttachments').disabled = !attachments;
|
2014-04-28 23:07:53 +09:00
|
|
|
|
2015-01-28 06:06:19 +09:00
|
|
|
if (!attachments && !container.classList.contains('hidden')) {
|
2014-09-22 20:41:17 +09:00
|
|
|
self.switchSidebarView('thumbs');
|
|
|
|
}
|
2014-04-28 23:07:53 +09:00
|
|
|
if (attachments &&
|
|
|
|
self.preferenceSidebarViewOnLoad === SidebarView.ATTACHMENTS) {
|
|
|
|
self.switchSidebarView('attachments', true);
|
|
|
|
}
|
2014-03-19 05:32:47 +09:00
|
|
|
});
|
2012-04-10 14:20:57 +09:00
|
|
|
});
|
|
|
|
|
2014-04-28 23:07:53 +09:00
|
|
|
if (self.preferenceSidebarViewOnLoad === SidebarView.THUMBS) {
|
|
|
|
Promise.all([firstPagePromise, onePageRendered]).then(function () {
|
|
|
|
self.switchSidebarView('thumbs', true);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2012-04-13 07:56:17 +09:00
|
|
|
pdfDocument.getMetadata().then(function(data) {
|
|
|
|
var info = data.info, metadata = data.metadata;
|
2012-04-10 14:20:57 +09:00
|
|
|
self.documentInfo = info;
|
|
|
|
self.metadata = metadata;
|
|
|
|
|
2012-11-06 02:12:17 +09:00
|
|
|
// Provides some basic debug information
|
|
|
|
console.log('PDF ' + pdfDocument.fingerprint + ' [' +
|
2014-04-10 19:20:39 +09:00
|
|
|
info.PDFFormatVersion + ' ' + (info.Producer || '-').trim() +
|
|
|
|
' / ' + (info.Creator || '-').trim() + ']' +
|
2014-04-08 09:24:22 +09:00
|
|
|
' (PDF.js: ' + (PDFJS.version || '-') +
|
|
|
|
(!PDFJS.disableWebGL ? ' [WebGL]' : '') + ')');
|
2012-11-06 02:12:17 +09:00
|
|
|
|
2012-04-10 14:20:57 +09:00
|
|
|
var pdfTitle;
|
2014-03-09 20:20:32 +09:00
|
|
|
if (metadata && metadata.has('dc:title')) {
|
2014-09-11 10:05:04 +09:00
|
|
|
var title = metadata.get('dc:title');
|
|
|
|
// Ghostscript sometimes return 'Untitled', sets the title to 'Untitled'
|
|
|
|
if (title !== 'Untitled') {
|
|
|
|
pdfTitle = title;
|
|
|
|
}
|
2012-04-10 14:20:57 +09:00
|
|
|
}
|
2011-10-02 03:54:37 +09:00
|
|
|
|
2014-03-09 20:20:32 +09:00
|
|
|
if (!pdfTitle && info && info['Title']) {
|
2012-04-10 14:20:57 +09:00
|
|
|
pdfTitle = info['Title'];
|
2014-03-09 20:20:32 +09:00
|
|
|
}
|
2012-04-10 14:20:57 +09:00
|
|
|
|
2014-03-09 20:20:32 +09:00
|
|
|
if (pdfTitle) {
|
2012-11-29 04:02:56 +09:00
|
|
|
self.setTitle(pdfTitle + ' - ' + document.title);
|
2014-03-09 20:20:32 +09:00
|
|
|
}
|
2013-02-01 06:46:44 +09:00
|
|
|
|
|
|
|
if (info.IsAcroFormPresent) {
|
2013-03-17 00:13:08 +09:00
|
|
|
console.warn('Warning: AcroForm/XFA is not supported');
|
2014-09-22 20:41:17 +09:00
|
|
|
self.fallback(PDFJS.UNSUPPORTED_FEATURES.forms);
|
2013-02-01 06:46:44 +09:00
|
|
|
}
|
2013-08-16 23:53:05 +09:00
|
|
|
|
2015-04-26 08:49:37 +09:00
|
|
|
//#if !PRODUCTION
|
2015-04-30 02:09:58 +09:00
|
|
|
if (true) {
|
|
|
|
return;
|
|
|
|
}
|
2015-04-26 08:49:37 +09:00
|
|
|
//#endif
|
2013-08-16 23:53:05 +09:00
|
|
|
//#if (FIREFOX || MOZCENTRAL)
|
2015-04-26 08:49:37 +09:00
|
|
|
var versionId = String(info.PDFFormatVersion).slice(-1) | 0;
|
|
|
|
var generatorId = 0;
|
|
|
|
var KNOWN_GENERATORS = [
|
|
|
|
'acrobat distiller', 'acrobat pdfwriter', 'adobe livecycle',
|
|
|
|
'adobe pdf library', 'adobe photoshop', 'ghostscript', 'tcpdf',
|
|
|
|
'cairo', 'dvipdfm', 'dvips', 'pdftex', 'pdfkit', 'itext', 'prince',
|
|
|
|
'quarkxpress', 'mac os x', 'microsoft', 'openoffice', 'oracle',
|
|
|
|
'luradocument', 'pdf-xchange', 'antenna house', 'aspose.cells', 'fpdf'
|
|
|
|
];
|
|
|
|
if (info.Producer) {
|
|
|
|
KNOWN_GENERATORS.some(function (generator, s, i) {
|
|
|
|
if (generator.indexOf(s) < 0) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
generatorId = i + 1;
|
|
|
|
return true;
|
|
|
|
}.bind(null, info.Producer.toLowerCase()));
|
|
|
|
}
|
|
|
|
var formType = !info.IsAcroFormPresent ? null : info.IsXFAPresent ?
|
|
|
|
'xfa' : 'acroform';
|
|
|
|
FirefoxCom.request('reportTelemetry', JSON.stringify({
|
|
|
|
type: 'documentInfo',
|
|
|
|
version: versionId,
|
|
|
|
generator: generatorId,
|
|
|
|
formType: formType
|
|
|
|
}));
|
2013-08-16 23:53:05 +09:00
|
|
|
//#endif
|
2012-04-10 14:20:57 +09:00
|
|
|
});
|
|
|
|
},
|
|
|
|
|
|
|
|
setInitialView: function pdfViewSetInitialView(storedHash, scale) {
|
2014-09-22 20:41:17 +09:00
|
|
|
this.isInitialViewSet = true;
|
|
|
|
|
2013-08-02 23:09:33 +09:00
|
|
|
// When opening a new file (when one is already loaded in the viewer):
|
|
|
|
// Reset 'currentPageNumber', since otherwise the page's scale will be wrong
|
|
|
|
// if 'currentPageNumber' is larger than the number of pages in the file.
|
2014-09-13 11:27:45 +09:00
|
|
|
document.getElementById('pageNumber').value =
|
|
|
|
this.pdfViewer.currentPageNumber = 1;
|
2013-08-02 23:09:33 +09:00
|
|
|
|
2015-04-27 23:04:11 +09:00
|
|
|
if (this.initialDestination) {
|
|
|
|
this.pdfLinkService.navigateTo(this.initialDestination);
|
|
|
|
this.initialDestination = null;
|
2013-05-16 07:31:17 +09:00
|
|
|
} else if (this.initialBookmark) {
|
2015-04-28 00:25:32 +09:00
|
|
|
this.pdfLinkService.setHash(this.initialBookmark);
|
2015-04-27 23:04:11 +09:00
|
|
|
this.pdfHistory.push({ hash: this.initialBookmark }, true);
|
2011-10-02 03:54:37 +09:00
|
|
|
this.initialBookmark = null;
|
2013-05-16 07:31:17 +09:00
|
|
|
} else if (storedHash) {
|
2015-04-28 00:25:32 +09:00
|
|
|
this.pdfLinkService.setHash(storedHash);
|
2013-05-16 07:31:17 +09:00
|
|
|
} else if (scale) {
|
2013-10-16 07:26:42 +09:00
|
|
|
this.setScale(scale, true);
|
2011-10-02 03:54:37 +09:00
|
|
|
this.page = 1;
|
2011-12-29 10:18:55 +09:00
|
|
|
}
|
2012-01-26 12:52:10 +09:00
|
|
|
|
2014-09-22 20:41:17 +09:00
|
|
|
if (this.pdfViewer.currentScale === UNKNOWN_SCALE) {
|
2012-01-26 12:52:10 +09:00
|
|
|
// Scale was not initialized: invalid bookmark or scale was not specified.
|
|
|
|
// Setting the default one.
|
2013-10-16 07:26:42 +09:00
|
|
|
this.setScale(DEFAULT_SCALE, true);
|
2012-01-26 12:52:10 +09:00
|
|
|
}
|
2011-10-02 03:54:37 +09:00
|
|
|
},
|
|
|
|
|
2013-11-15 06:43:38 +09:00
|
|
|
cleanup: function pdfViewCleanup() {
|
2014-09-13 11:27:45 +09:00
|
|
|
this.pdfViewer.cleanup();
|
2014-09-13 04:48:44 +09:00
|
|
|
this.pdfThumbnailViewer.cleanup();
|
2013-11-15 06:43:38 +09:00
|
|
|
this.pdfDocument.cleanup();
|
2012-06-19 01:48:47 +09:00
|
|
|
},
|
|
|
|
|
2014-09-16 01:18:28 +09:00
|
|
|
forceRendering: function pdfViewForceRendering() {
|
|
|
|
this.pdfRenderingQueue.printing = this.printing;
|
|
|
|
this.pdfRenderingQueue.isThumbnailViewEnabled = this.sidebarOpen;
|
|
|
|
this.pdfRenderingQueue.renderHighestPriority();
|
2012-06-19 01:48:47 +09:00
|
|
|
},
|
|
|
|
|
2015-01-28 05:13:34 +09:00
|
|
|
refreshThumbnailViewer: function pdfViewRefreshThumbnailViewer() {
|
|
|
|
var pdfViewer = this.pdfViewer;
|
|
|
|
var thumbnailViewer = this.pdfThumbnailViewer;
|
|
|
|
|
|
|
|
// set thumbnail images of rendered pages
|
|
|
|
var pagesCount = pdfViewer.pagesCount;
|
|
|
|
for (var pageIndex = 0; pageIndex < pagesCount; pageIndex++) {
|
|
|
|
var pageView = pdfViewer.getPageView(pageIndex);
|
|
|
|
if (pageView && pageView.renderingState === RenderingStates.FINISHED) {
|
|
|
|
var thumbnailView = thumbnailViewer.getThumbnail(pageIndex);
|
|
|
|
thumbnailView.setImage(pageView);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
thumbnailViewer.scrollThumbnailIntoView(this.page);
|
|
|
|
},
|
|
|
|
|
2014-04-28 23:07:53 +09:00
|
|
|
switchSidebarView: function pdfViewSwitchSidebarView(view, openSidebar) {
|
|
|
|
if (openSidebar && !this.sidebarOpen) {
|
|
|
|
document.getElementById('sidebarToggle').click();
|
|
|
|
}
|
2012-04-13 08:29:15 +09:00
|
|
|
var thumbsView = document.getElementById('thumbnailView');
|
|
|
|
var outlineView = document.getElementById('outlineView');
|
2014-03-19 05:32:47 +09:00
|
|
|
var attachmentsView = document.getElementById('attachmentsView');
|
2012-05-22 00:15:24 +09:00
|
|
|
|
2012-05-09 06:22:48 +09:00
|
|
|
var thumbsButton = document.getElementById('viewThumbnail');
|
|
|
|
var outlineButton = document.getElementById('viewOutline');
|
2014-03-19 05:32:47 +09:00
|
|
|
var attachmentsButton = document.getElementById('viewAttachments');
|
2012-04-13 08:29:15 +09:00
|
|
|
|
2011-08-26 02:20:19 +09:00
|
|
|
switch (view) {
|
2011-08-22 11:05:10 +09:00
|
|
|
case 'thumbs':
|
2014-03-19 05:32:47 +09:00
|
|
|
var wasAnotherViewVisible = thumbsView.classList.contains('hidden');
|
2013-01-11 06:56:36 +09:00
|
|
|
|
2012-05-09 06:22:48 +09:00
|
|
|
thumbsButton.classList.add('toggled');
|
|
|
|
outlineButton.classList.remove('toggled');
|
2014-03-19 05:32:47 +09:00
|
|
|
attachmentsButton.classList.remove('toggled');
|
2012-05-09 06:22:48 +09:00
|
|
|
thumbsView.classList.remove('hidden');
|
|
|
|
outlineView.classList.add('hidden');
|
2014-03-19 05:32:47 +09:00
|
|
|
attachmentsView.classList.add('hidden');
|
2012-05-09 06:22:48 +09:00
|
|
|
|
2014-09-22 20:41:17 +09:00
|
|
|
this.forceRendering();
|
2013-01-11 06:56:36 +09:00
|
|
|
|
2014-03-19 05:32:47 +09:00
|
|
|
if (wasAnotherViewVisible) {
|
2014-09-13 04:48:44 +09:00
|
|
|
this.pdfThumbnailViewer.ensureThumbnailVisible(this.page);
|
2013-01-11 06:56:36 +09:00
|
|
|
}
|
2011-08-22 11:05:10 +09:00
|
|
|
break;
|
2011-12-12 10:38:20 +09:00
|
|
|
|
2011-08-22 11:05:10 +09:00
|
|
|
case 'outline':
|
2012-05-09 06:22:48 +09:00
|
|
|
thumbsButton.classList.remove('toggled');
|
|
|
|
outlineButton.classList.add('toggled');
|
2014-03-19 05:32:47 +09:00
|
|
|
attachmentsButton.classList.remove('toggled');
|
2012-05-09 06:22:48 +09:00
|
|
|
thumbsView.classList.add('hidden');
|
|
|
|
outlineView.classList.remove('hidden');
|
2014-03-19 05:32:47 +09:00
|
|
|
attachmentsView.classList.add('hidden');
|
2011-12-12 10:38:20 +09:00
|
|
|
|
2014-03-09 20:20:32 +09:00
|
|
|
if (outlineButton.getAttribute('disabled')) {
|
2012-05-09 06:22:48 +09:00
|
|
|
return;
|
2014-03-09 20:20:32 +09:00
|
|
|
}
|
2012-05-09 06:22:48 +09:00
|
|
|
break;
|
2014-03-19 05:32:47 +09:00
|
|
|
|
|
|
|
case 'attachments':
|
|
|
|
thumbsButton.classList.remove('toggled');
|
|
|
|
outlineButton.classList.remove('toggled');
|
|
|
|
attachmentsButton.classList.add('toggled');
|
|
|
|
thumbsView.classList.add('hidden');
|
|
|
|
outlineView.classList.add('hidden');
|
|
|
|
attachmentsView.classList.remove('hidden');
|
|
|
|
|
|
|
|
if (attachmentsButton.getAttribute('disabled')) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
break;
|
2011-08-22 11:05:10 +09:00
|
|
|
}
|
2011-07-29 02:48:05 +09:00
|
|
|
},
|
|
|
|
|
2012-06-29 01:50:25 +09:00
|
|
|
beforePrint: function pdfViewSetupBeforePrint() {
|
|
|
|
if (!this.supportsPrinting) {
|
2012-07-10 08:04:55 +09:00
|
|
|
var printMessage = mozL10n.get('printing_not_supported', null,
|
2012-07-13 02:31:20 +09:00
|
|
|
'Warning: Printing is not fully supported by this browser.');
|
2012-07-13 03:58:06 +09:00
|
|
|
this.error(printMessage);
|
2012-06-29 01:50:25 +09:00
|
|
|
return;
|
|
|
|
}
|
2013-03-09 11:08:37 +09:00
|
|
|
|
|
|
|
var alertNotReady = false;
|
2014-04-08 05:34:03 +09:00
|
|
|
var i, ii;
|
2015-06-06 06:55:08 +09:00
|
|
|
if (!this.pdfDocument || !this.pagesCount) {
|
2013-03-09 11:08:37 +09:00
|
|
|
alertNotReady = true;
|
|
|
|
} else {
|
2014-09-13 11:27:45 +09:00
|
|
|
for (i = 0, ii = this.pagesCount; i < ii; ++i) {
|
2014-09-30 21:13:46 +09:00
|
|
|
if (!this.pdfViewer.getPageView(i).pdfPage) {
|
2013-03-09 11:08:37 +09:00
|
|
|
alertNotReady = true;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (alertNotReady) {
|
|
|
|
var notReadyMessage = mozL10n.get('printing_not_ready', null,
|
|
|
|
'Warning: The PDF is not fully loaded for printing.');
|
|
|
|
window.alert(notReadyMessage);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2014-06-25 07:23:42 +09:00
|
|
|
this.printing = true;
|
2014-09-16 01:18:28 +09:00
|
|
|
this.forceRendering();
|
2014-06-25 07:23:42 +09:00
|
|
|
|
2012-07-13 02:31:20 +09:00
|
|
|
var body = document.querySelector('body');
|
|
|
|
body.setAttribute('data-mozPrintCallback', true);
|
2015-03-19 07:15:43 +09:00
|
|
|
|
|
|
|
if (!this.hasEqualPageSizes) {
|
|
|
|
console.warn('Not all pages have the same size. The printed result ' +
|
|
|
|
'may be incorrect!');
|
|
|
|
}
|
|
|
|
|
|
|
|
// Insert a @page + size rule to make sure that the page size is correctly
|
|
|
|
// set. Note that we assume that all pages have the same size, because
|
|
|
|
// variable-size pages are not supported yet (at least in Chrome & Firefox).
|
|
|
|
// TODO(robwu): Use named pages when size calculation bugs get resolved
|
|
|
|
// (e.g. https://crbug.com/355116) AND when support for named pages is
|
|
|
|
// added (http://www.w3.org/TR/css3-page/#using-named-pages).
|
|
|
|
// In browsers where @page + size is not supported (such as Firefox,
|
|
|
|
// https://bugzil.la/851441), the next stylesheet will be ignored and the
|
|
|
|
// user has to select the correct paper size in the UI if wanted.
|
|
|
|
this.pageStyleSheet = document.createElement('style');
|
|
|
|
var pageSize = this.pdfViewer.getPageView(0).pdfPage.getViewport(1);
|
|
|
|
this.pageStyleSheet.textContent =
|
|
|
|
// "size:<width> <height>" is what we need. But also add "A4" because
|
|
|
|
// Firefox incorrectly reports support for the other value.
|
|
|
|
'@supports ((size:A4) and (size:1pt 1pt)) {' +
|
|
|
|
'@page { size: ' + pageSize.width + 'pt ' + pageSize.height + 'pt;}' +
|
|
|
|
// The canvas and each ancestor node must have a height of 100% to make
|
|
|
|
// sure that each canvas is printed on exactly one page.
|
|
|
|
'#printContainer {height:100%}' +
|
|
|
|
'#printContainer > div {width:100% !important;height:100% !important;}' +
|
|
|
|
'}';
|
|
|
|
body.appendChild(this.pageStyleSheet);
|
|
|
|
|
2014-09-13 11:27:45 +09:00
|
|
|
for (i = 0, ii = this.pagesCount; i < ii; ++i) {
|
2014-09-30 21:13:46 +09:00
|
|
|
this.pdfViewer.getPageView(i).beforePrint();
|
2012-06-29 01:50:25 +09:00
|
|
|
}
|
2014-06-15 05:55:21 +09:00
|
|
|
|
2015-04-26 08:49:37 +09:00
|
|
|
//#if !PRODUCTION
|
2015-04-30 02:09:58 +09:00
|
|
|
if (true) {
|
|
|
|
return;
|
|
|
|
}
|
2015-04-26 08:49:37 +09:00
|
|
|
//#endif
|
2014-06-15 05:55:21 +09:00
|
|
|
//#if (FIREFOX || MOZCENTRAL)
|
2015-04-26 08:49:37 +09:00
|
|
|
FirefoxCom.request('reportTelemetry', JSON.stringify({
|
|
|
|
type: 'print'
|
|
|
|
}));
|
2014-06-15 05:55:21 +09:00
|
|
|
//#endif
|
2012-06-29 01:50:25 +09:00
|
|
|
},
|
|
|
|
|
2015-03-19 07:15:43 +09:00
|
|
|
// Whether all pages of the PDF have the same width and height.
|
|
|
|
get hasEqualPageSizes() {
|
|
|
|
var firstPage = this.pdfViewer.getPageView(0);
|
|
|
|
for (var i = 1, ii = this.pagesCount; i < ii; ++i) {
|
|
|
|
var pageView = this.pdfViewer.getPageView(i);
|
|
|
|
if (pageView.width !== firstPage.width ||
|
|
|
|
pageView.height !== firstPage.height) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
},
|
|
|
|
|
2012-06-29 01:50:25 +09:00
|
|
|
afterPrint: function pdfViewSetupAfterPrint() {
|
|
|
|
var div = document.getElementById('printContainer');
|
2014-03-09 20:20:32 +09:00
|
|
|
while (div.hasChildNodes()) {
|
2012-06-29 01:50:25 +09:00
|
|
|
div.removeChild(div.lastChild);
|
2014-03-09 20:20:32 +09:00
|
|
|
}
|
2014-06-25 07:23:42 +09:00
|
|
|
|
2015-03-19 07:15:43 +09:00
|
|
|
if (this.pageStyleSheet && this.pageStyleSheet.parentNode) {
|
|
|
|
this.pageStyleSheet.parentNode.removeChild(this.pageStyleSheet);
|
|
|
|
this.pageStyleSheet = null;
|
|
|
|
}
|
|
|
|
|
2014-06-25 07:23:42 +09:00
|
|
|
this.printing = false;
|
2014-09-16 01:18:28 +09:00
|
|
|
this.forceRendering();
|
2012-07-31 00:12:49 +09:00
|
|
|
},
|
|
|
|
|
2014-09-21 02:15:18 +09:00
|
|
|
setScale: function (value, resetAutoSettings) {
|
|
|
|
this.updateScaleControls = !!resetAutoSettings;
|
|
|
|
this.pdfViewer.currentScaleValue = value;
|
|
|
|
this.updateScaleControls = true;
|
2014-09-13 11:27:45 +09:00
|
|
|
},
|
2012-09-08 08:05:14 +09:00
|
|
|
|
2014-09-13 11:27:45 +09:00
|
|
|
rotatePages: function pdfViewRotatePages(delta) {
|
2014-09-30 21:13:46 +09:00
|
|
|
var pageNumber = this.page;
|
2014-09-13 11:27:45 +09:00
|
|
|
this.pageRotation = (this.pageRotation + 360 + delta) % 360;
|
2014-09-21 02:15:18 +09:00
|
|
|
this.pdfViewer.pagesRotation = this.pageRotation;
|
|
|
|
this.pdfThumbnailViewer.pagesRotation = this.pageRotation;
|
2012-09-08 08:05:14 +09:00
|
|
|
|
2014-09-16 01:18:28 +09:00
|
|
|
this.forceRendering();
|
2012-09-08 08:05:14 +09:00
|
|
|
|
2014-09-30 21:13:46 +09:00
|
|
|
this.pdfViewer.scrollPageIntoView(pageNumber);
|
2012-09-14 05:23:44 +09:00
|
|
|
},
|
|
|
|
|
2015-01-29 21:37:49 +09:00
|
|
|
requestPresentationMode: function pdfViewRequestPresentationMode() {
|
2015-02-04 02:09:11 +09:00
|
|
|
if (!this.pdfPresentationMode) {
|
2015-01-29 21:37:49 +09:00
|
|
|
return;
|
|
|
|
}
|
2015-02-04 02:09:11 +09:00
|
|
|
this.pdfPresentationMode.request();
|
2015-01-29 21:37:49 +09:00
|
|
|
},
|
|
|
|
|
2015-02-02 06:53:59 +09:00
|
|
|
/**
|
|
|
|
* @param {number} delta - The delta value from the mouse event.
|
|
|
|
*/
|
2015-02-01 00:46:23 +09:00
|
|
|
scrollPresentationMode: function pdfViewScrollPresentationMode(delta) {
|
2015-02-04 02:09:11 +09:00
|
|
|
if (!this.pdfPresentationMode) {
|
2012-09-14 05:23:44 +09:00
|
|
|
return;
|
2014-03-09 20:20:32 +09:00
|
|
|
}
|
2015-02-04 02:09:11 +09:00
|
|
|
this.pdfPresentationMode.mouseScroll(delta);
|
2011-08-09 05:13:32 +09:00
|
|
|
}
|
2011-07-29 02:48:05 +09:00
|
|
|
};
|
2014-09-22 20:41:17 +09:00
|
|
|
//#if GENERIC
|
|
|
|
window.PDFView = PDFViewerApplication; // obsolete name, using it as an alias
|
|
|
|
//#endif
|
2011-07-29 02:48:05 +09:00
|
|
|
|
[CRX] Show nicely formatted URL in omnibox
Before commit:
chrome-extension://EXTENSIONID/content/web/viewer.html?file=http%3A%2F%2Fexample.com%2Ffile.pdf
After commit:
chrome-extension://EXTENSIONID/http://example/file.pdf
Technical details:
- The extension's background page uses the webRequest API to intercept
requests for <extension host>/<real path to pdf>, and redirect it to
the viewer's URL.
- viewer.js uses history.replaceState to rewrite the URL, so that it's
easier for users to recognize and copy-paste URLs.
- The fake paths /http:, /https:, /file:, etc. have been added to the
web_accessible_resources section of the manifest file, in order to
avoid seeing chrome-extension://invalid/ instead of the actual URL
when using history back/forward to navigate from/to the PDF viewer.
- Since the relative path resolving doesn't work because relative URLs
are inaccurate, a <base> tag has been added. This method has already
been proven to work in the Firefox add-on.
Notes:
- This commit has been cherry-picked from crx-using-streams-api.
- Need to merge https://github.com/mozilla/pdf.js/pull/3582 to deal with
a bug in Chrome <=30
- In Chrome, getting the contents of a FTP file is not possible, so
there's no support for FTP files, even though the extension router
recognizes the ftp: scheme.
2013-08-16 05:47:30 +09:00
|
|
|
//#if CHROME
|
|
|
|
//(function rewriteUrlClosure() {
|
|
|
|
// // Run this code outside DOMContentLoaded to make sure that the URL
|
|
|
|
// // is rewritten as soon as possible.
|
2014-09-22 20:41:17 +09:00
|
|
|
// var queryString = document.location.search.slice(1);
|
2015-04-28 00:25:32 +09:00
|
|
|
// var params = parseQueryString(queryString);
|
2014-04-12 00:28:35 +09:00
|
|
|
// DEFAULT_URL = params.file || '';
|
[CRX] Show nicely formatted URL in omnibox
Before commit:
chrome-extension://EXTENSIONID/content/web/viewer.html?file=http%3A%2F%2Fexample.com%2Ffile.pdf
After commit:
chrome-extension://EXTENSIONID/http://example/file.pdf
Technical details:
- The extension's background page uses the webRequest API to intercept
requests for <extension host>/<real path to pdf>, and redirect it to
the viewer's URL.
- viewer.js uses history.replaceState to rewrite the URL, so that it's
easier for users to recognize and copy-paste URLs.
- The fake paths /http:, /https:, /file:, etc. have been added to the
web_accessible_resources section of the manifest file, in order to
avoid seeing chrome-extension://invalid/ instead of the actual URL
when using history back/forward to navigate from/to the PDF viewer.
- Since the relative path resolving doesn't work because relative URLs
are inaccurate, a <base> tag has been added. This method has already
been proven to work in the Firefox add-on.
Notes:
- This commit has been cherry-picked from crx-using-streams-api.
- Need to merge https://github.com/mozilla/pdf.js/pull/3582 to deal with
a bug in Chrome <=30
- In Chrome, getting the contents of a FTP file is not possible, so
there's no support for FTP files, even though the extension router
recognizes the ftp: scheme.
2013-08-16 05:47:30 +09:00
|
|
|
//
|
2014-01-26 05:44:58 +09:00
|
|
|
// // Example: chrome-extension://.../http://example.com/file.pdf
|
|
|
|
// var humanReadableUrl = '/' + DEFAULT_URL + location.hash;
|
|
|
|
// history.replaceState(history.state, '', humanReadableUrl);
|
|
|
|
// if (top === window) {
|
2013-12-07 20:32:08 +09:00
|
|
|
// chrome.runtime.sendMessage('showPageAction');
|
[CRX] Show nicely formatted URL in omnibox
Before commit:
chrome-extension://EXTENSIONID/content/web/viewer.html?file=http%3A%2F%2Fexample.com%2Ffile.pdf
After commit:
chrome-extension://EXTENSIONID/http://example/file.pdf
Technical details:
- The extension's background page uses the webRequest API to intercept
requests for <extension host>/<real path to pdf>, and redirect it to
the viewer's URL.
- viewer.js uses history.replaceState to rewrite the URL, so that it's
easier for users to recognize and copy-paste URLs.
- The fake paths /http:, /https:, /file:, etc. have been added to the
web_accessible_resources section of the manifest file, in order to
avoid seeing chrome-extension://invalid/ instead of the actual URL
when using history back/forward to navigate from/to the PDF viewer.
- Since the relative path resolving doesn't work because relative URLs
are inaccurate, a <base> tag has been added. This method has already
been proven to work in the Firefox add-on.
Notes:
- This commit has been cherry-picked from crx-using-streams-api.
- Need to merge https://github.com/mozilla/pdf.js/pull/3582 to deal with
a bug in Chrome <=30
- In Chrome, getting the contents of a FTP file is not possible, so
there's no support for FTP files, even though the extension router
recognizes the ftp: scheme.
2013-08-16 05:47:30 +09:00
|
|
|
// }
|
|
|
|
//})();
|
|
|
|
//#endif
|
|
|
|
|
2014-02-28 02:45:02 +09:00
|
|
|
function webViewerLoad(evt) {
|
2014-09-22 20:41:17 +09:00
|
|
|
PDFViewerApplication.initialize().then(webViewerInitialized);
|
2014-04-04 02:20:53 +09:00
|
|
|
}
|
2011-06-14 02:16:03 +09:00
|
|
|
|
2014-04-04 02:20:53 +09:00
|
|
|
function webViewerInitialized() {
|
2013-10-18 05:55:25 +09:00
|
|
|
//#if (GENERIC || B2G)
|
2014-09-22 20:41:17 +09:00
|
|
|
var queryString = document.location.search.substring(1);
|
2015-04-28 00:25:32 +09:00
|
|
|
var params = parseQueryString(queryString);
|
2014-02-28 02:45:02 +09:00
|
|
|
var file = 'file' in params ? params.file : DEFAULT_URL;
|
2013-10-18 05:55:25 +09:00
|
|
|
//#endif
|
|
|
|
//#if (FIREFOX || MOZCENTRAL)
|
2013-07-27 19:31:51 +09:00
|
|
|
//var file = window.location.href.split('#')[0];
|
2012-08-02 03:29:13 +09:00
|
|
|
//#endif
|
2013-10-18 05:55:25 +09:00
|
|
|
//#if CHROME
|
|
|
|
//var file = DEFAULT_URL;
|
2013-08-15 06:36:40 +09:00
|
|
|
//#endif
|
|
|
|
|
2015-04-26 08:49:37 +09:00
|
|
|
//#if GENERIC
|
2013-07-31 06:36:45 +09:00
|
|
|
var fileInput = document.createElement('input');
|
|
|
|
fileInput.id = 'fileInput';
|
|
|
|
fileInput.className = 'fileInput';
|
|
|
|
fileInput.setAttribute('type', 'file');
|
|
|
|
fileInput.oncontextmenu = noContextMenuHandler;
|
|
|
|
document.body.appendChild(fileInput);
|
|
|
|
|
2012-08-02 03:29:13 +09:00
|
|
|
if (!window.File || !window.FileReader || !window.FileList || !window.Blob) {
|
2012-05-21 07:12:58 +09:00
|
|
|
document.getElementById('openFile').setAttribute('hidden', 'true');
|
2013-09-05 06:48:31 +09:00
|
|
|
document.getElementById('secondaryOpenFile').setAttribute('hidden', 'true');
|
2012-01-25 08:13:50 +09:00
|
|
|
} else {
|
2011-07-29 02:48:05 +09:00
|
|
|
document.getElementById('fileInput').value = null;
|
2012-01-25 08:13:50 +09:00
|
|
|
}
|
2012-08-02 03:29:13 +09:00
|
|
|
//#else
|
|
|
|
//document.getElementById('openFile').setAttribute('hidden', 'true');
|
2013-09-05 06:48:31 +09:00
|
|
|
//document.getElementById('secondaryOpenFile').setAttribute('hidden', 'true');
|
2012-08-02 03:29:13 +09:00
|
|
|
//#endif
|
2011-12-10 03:17:48 +09:00
|
|
|
|
2014-06-17 05:18:12 +09:00
|
|
|
//#if !(FIREFOX || MOZCENTRAL)
|
|
|
|
var locale = PDFJS.locale || navigator.language;
|
|
|
|
//#endif
|
2014-01-11 20:57:33 +09:00
|
|
|
|
2014-03-18 03:20:24 +09:00
|
|
|
//#if !PRODUCTION
|
2014-06-17 05:18:12 +09:00
|
|
|
if (true) {
|
|
|
|
//#else
|
2014-10-01 18:42:06 +09:00
|
|
|
//if (PDFViewerApplication.preferencePdfBugEnabled) {
|
2014-03-18 03:20:24 +09:00
|
|
|
//#endif
|
2014-06-17 05:18:12 +09:00
|
|
|
// Special debugging flags in the hash section of the URL.
|
|
|
|
var hash = document.location.hash.substring(1);
|
2015-04-28 00:25:32 +09:00
|
|
|
var hashParams = parseQueryString(hash);
|
2014-03-18 03:20:24 +09:00
|
|
|
|
2014-09-20 08:25:11 +09:00
|
|
|
if ('disableworker' in hashParams) {
|
|
|
|
PDFJS.disableWorker = (hashParams['disableworker'] === 'true');
|
2014-06-17 05:18:12 +09:00
|
|
|
}
|
2014-09-20 08:25:11 +09:00
|
|
|
if ('disablerange' in hashParams) {
|
|
|
|
PDFJS.disableRange = (hashParams['disablerange'] === 'true');
|
2014-06-17 05:18:12 +09:00
|
|
|
}
|
2014-09-06 10:02:54 +09:00
|
|
|
if ('disablestream' in hashParams) {
|
|
|
|
PDFJS.disableStream = (hashParams['disablestream'] === 'true');
|
|
|
|
}
|
2014-09-20 08:25:11 +09:00
|
|
|
if ('disableautofetch' in hashParams) {
|
|
|
|
PDFJS.disableAutoFetch = (hashParams['disableautofetch'] === 'true');
|
2014-06-17 05:18:12 +09:00
|
|
|
}
|
2014-09-20 08:25:11 +09:00
|
|
|
if ('disablefontface' in hashParams) {
|
|
|
|
PDFJS.disableFontFace = (hashParams['disablefontface'] === 'true');
|
2014-06-17 05:18:12 +09:00
|
|
|
}
|
2014-09-20 08:25:11 +09:00
|
|
|
if ('disablehistory' in hashParams) {
|
|
|
|
PDFJS.disableHistory = (hashParams['disablehistory'] === 'true');
|
2014-06-17 05:18:12 +09:00
|
|
|
}
|
|
|
|
if ('webgl' in hashParams) {
|
|
|
|
PDFJS.disableWebGL = (hashParams['webgl'] !== 'true');
|
|
|
|
}
|
2014-09-20 08:25:11 +09:00
|
|
|
if ('useonlycsszoom' in hashParams) {
|
|
|
|
PDFJS.useOnlyCssZoom = (hashParams['useonlycsszoom'] === 'true');
|
2014-06-17 05:18:12 +09:00
|
|
|
}
|
|
|
|
if ('verbosity' in hashParams) {
|
|
|
|
PDFJS.verbosity = hashParams['verbosity'] | 0;
|
|
|
|
}
|
2014-09-20 08:25:11 +09:00
|
|
|
if ('ignorecurrentpositiononzoom' in hashParams) {
|
2014-06-17 05:18:12 +09:00
|
|
|
IGNORE_CURRENT_POSITION_ON_ZOOM =
|
2014-09-20 08:25:11 +09:00
|
|
|
(hashParams['ignorecurrentpositiononzoom'] === 'true');
|
2014-06-17 05:18:12 +09:00
|
|
|
}
|
|
|
|
//#if !PRODUCTION
|
2014-09-20 08:25:11 +09:00
|
|
|
if ('disablebcmaps' in hashParams && hashParams['disablebcmaps']) {
|
2014-06-17 05:18:12 +09:00
|
|
|
PDFJS.cMapUrl = '../external/cmaps/';
|
|
|
|
PDFJS.cMapPacked = false;
|
|
|
|
}
|
|
|
|
//#endif
|
2012-08-02 03:29:13 +09:00
|
|
|
//#if !(FIREFOX || MOZCENTRAL)
|
2014-06-17 05:18:12 +09:00
|
|
|
if ('locale' in hashParams) {
|
|
|
|
locale = hashParams['locale'];
|
|
|
|
}
|
|
|
|
//#endif
|
2014-09-20 08:25:11 +09:00
|
|
|
if ('textlayer' in hashParams) {
|
|
|
|
switch (hashParams['textlayer']) {
|
2014-06-17 05:18:12 +09:00
|
|
|
case 'off':
|
|
|
|
PDFJS.disableTextLayer = true;
|
|
|
|
break;
|
|
|
|
case 'visible':
|
|
|
|
case 'shadow':
|
|
|
|
case 'hover':
|
|
|
|
var viewer = document.getElementById('viewer');
|
2014-09-20 08:25:11 +09:00
|
|
|
viewer.classList.add('textLayer-' + hashParams['textlayer']);
|
2014-06-17 05:18:12 +09:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
2014-09-20 08:25:11 +09:00
|
|
|
if ('pdfbug' in hashParams) {
|
2014-06-17 05:18:12 +09:00
|
|
|
PDFJS.pdfBug = true;
|
2014-09-20 08:25:11 +09:00
|
|
|
var pdfBug = hashParams['pdfbug'];
|
2014-06-17 05:18:12 +09:00
|
|
|
var enabled = pdfBug.split(',');
|
|
|
|
PDFBug.enable(enabled);
|
|
|
|
PDFBug.init();
|
|
|
|
}
|
2014-03-09 20:20:32 +09:00
|
|
|
}
|
2014-06-17 05:18:12 +09:00
|
|
|
|
|
|
|
//#if !(FIREFOX || MOZCENTRAL)
|
2012-11-30 05:02:33 +09:00
|
|
|
mozL10n.setLanguage(locale);
|
2013-05-16 05:57:27 +09:00
|
|
|
//#endif
|
|
|
|
//#if (FIREFOX || MOZCENTRAL)
|
2015-04-26 08:49:37 +09:00
|
|
|
if (!PDFViewerApplication.supportsDocumentFonts) {
|
|
|
|
PDFJS.disableFontFace = true;
|
|
|
|
console.warn(mozL10n.get('web_fonts_disabled', null,
|
|
|
|
'Web fonts are disabled: unable to use embedded PDF fonts.'));
|
|
|
|
}
|
2012-08-02 03:29:13 +09:00
|
|
|
//#endif
|
2012-05-01 05:29:05 +09:00
|
|
|
|
2014-09-22 20:41:17 +09:00
|
|
|
if (!PDFViewerApplication.supportsPrinting) {
|
2012-07-10 08:04:55 +09:00
|
|
|
document.getElementById('print').classList.add('hidden');
|
2013-09-05 06:48:31 +09:00
|
|
|
document.getElementById('secondaryPrint').classList.add('hidden');
|
2012-07-10 08:04:55 +09:00
|
|
|
}
|
|
|
|
|
2014-09-22 20:41:17 +09:00
|
|
|
if (!PDFViewerApplication.supportsFullscreen) {
|
2013-03-02 05:54:02 +09:00
|
|
|
document.getElementById('presentationMode').classList.add('hidden');
|
2013-09-05 06:48:31 +09:00
|
|
|
document.getElementById('secondaryPresentationMode').
|
|
|
|
classList.add('hidden');
|
2012-07-31 00:12:49 +09:00
|
|
|
}
|
|
|
|
|
2014-09-22 20:41:17 +09:00
|
|
|
if (PDFViewerApplication.supportsIntegratedFind) {
|
2013-05-01 04:14:18 +09:00
|
|
|
document.getElementById('viewFind').classList.add('hidden');
|
2012-10-06 05:59:13 +09:00
|
|
|
}
|
|
|
|
|
2014-07-24 15:59:27 +09:00
|
|
|
// Listen for unsupported features to trigger the fallback UI.
|
2014-09-22 20:41:17 +09:00
|
|
|
PDFJS.UnsupportedManager.listen(
|
|
|
|
PDFViewerApplication.fallback.bind(PDFViewerApplication));
|
2012-05-15 09:19:09 +09:00
|
|
|
|
2013-07-31 06:36:45 +09:00
|
|
|
// Suppress context menus for some controls
|
|
|
|
document.getElementById('scaleSelect').oncontextmenu = noContextMenuHandler;
|
|
|
|
|
2012-04-26 03:34:28 +09:00
|
|
|
var mainContainer = document.getElementById('mainContainer');
|
2012-05-02 03:31:23 +09:00
|
|
|
var outerContainer = document.getElementById('outerContainer');
|
2012-04-26 03:34:28 +09:00
|
|
|
mainContainer.addEventListener('transitionend', function(e) {
|
2014-08-01 04:49:29 +09:00
|
|
|
if (e.target === mainContainer) {
|
2012-05-01 05:11:31 +09:00
|
|
|
var event = document.createEvent('UIEvents');
|
|
|
|
event.initUIEvent('resize', false, false, window, 0);
|
|
|
|
window.dispatchEvent(event);
|
2012-05-02 03:31:23 +09:00
|
|
|
outerContainer.classList.remove('sidebarMoving');
|
2012-04-26 03:34:28 +09:00
|
|
|
}
|
|
|
|
}, true);
|
|
|
|
|
2012-04-13 07:08:07 +09:00
|
|
|
document.getElementById('sidebarToggle').addEventListener('click',
|
|
|
|
function() {
|
2012-04-14 06:14:05 +09:00
|
|
|
this.classList.toggle('toggled');
|
2012-05-02 03:31:23 +09:00
|
|
|
outerContainer.classList.add('sidebarMoving');
|
|
|
|
outerContainer.classList.toggle('sidebarOpen');
|
2014-09-22 20:41:17 +09:00
|
|
|
PDFViewerApplication.sidebarOpen =
|
|
|
|
outerContainer.classList.contains('sidebarOpen');
|
2015-01-28 05:08:36 +09:00
|
|
|
if (PDFViewerApplication.sidebarOpen) {
|
2015-01-28 05:13:34 +09:00
|
|
|
PDFViewerApplication.refreshThumbnailViewer();
|
2015-01-28 05:08:36 +09:00
|
|
|
}
|
2014-09-22 20:41:17 +09:00
|
|
|
PDFViewerApplication.forceRendering();
|
2012-04-13 07:08:07 +09:00
|
|
|
});
|
2012-04-19 04:02:49 +09:00
|
|
|
|
2012-09-07 00:33:07 +09:00
|
|
|
document.getElementById('viewThumbnail').addEventListener('click',
|
|
|
|
function() {
|
2014-09-22 20:41:17 +09:00
|
|
|
PDFViewerApplication.switchSidebarView('thumbs');
|
2012-09-07 00:33:07 +09:00
|
|
|
});
|
|
|
|
|
|
|
|
document.getElementById('viewOutline').addEventListener('click',
|
|
|
|
function() {
|
2014-09-22 20:41:17 +09:00
|
|
|
PDFViewerApplication.switchSidebarView('outline');
|
2012-09-07 00:33:07 +09:00
|
|
|
});
|
|
|
|
|
2014-03-19 05:32:47 +09:00
|
|
|
document.getElementById('viewAttachments').addEventListener('click',
|
|
|
|
function() {
|
2014-09-22 20:41:17 +09:00
|
|
|
PDFViewerApplication.switchSidebarView('attachments');
|
2014-03-19 05:32:47 +09:00
|
|
|
});
|
|
|
|
|
2012-09-07 00:33:07 +09:00
|
|
|
document.getElementById('previous').addEventListener('click',
|
|
|
|
function() {
|
2014-09-22 20:41:17 +09:00
|
|
|
PDFViewerApplication.page--;
|
2012-09-07 00:33:07 +09:00
|
|
|
});
|
|
|
|
|
|
|
|
document.getElementById('next').addEventListener('click',
|
|
|
|
function() {
|
2014-09-22 20:41:17 +09:00
|
|
|
PDFViewerApplication.page++;
|
2012-09-07 00:33:07 +09:00
|
|
|
});
|
|
|
|
|
2013-05-01 04:14:18 +09:00
|
|
|
document.getElementById('zoomIn').addEventListener('click',
|
2012-09-07 00:33:07 +09:00
|
|
|
function() {
|
2014-09-22 20:41:17 +09:00
|
|
|
PDFViewerApplication.zoomIn();
|
2012-09-07 00:33:07 +09:00
|
|
|
});
|
|
|
|
|
2013-05-01 04:14:18 +09:00
|
|
|
document.getElementById('zoomOut').addEventListener('click',
|
2012-09-07 00:33:07 +09:00
|
|
|
function() {
|
2014-09-22 20:41:17 +09:00
|
|
|
PDFViewerApplication.zoomOut();
|
2012-09-07 00:33:07 +09:00
|
|
|
});
|
|
|
|
|
2014-07-18 20:53:04 +09:00
|
|
|
document.getElementById('pageNumber').addEventListener('click', function() {
|
|
|
|
this.select();
|
|
|
|
});
|
2013-01-22 02:30:59 +09:00
|
|
|
|
2014-07-18 20:53:04 +09:00
|
|
|
document.getElementById('pageNumber').addEventListener('change', function() {
|
|
|
|
// Handle the user inputting a floating point number.
|
|
|
|
PDFViewerApplication.page = (this.value | 0);
|
2013-01-22 02:30:59 +09:00
|
|
|
|
2014-07-18 20:53:04 +09:00
|
|
|
if (this.value !== (this.value | 0).toString()) {
|
|
|
|
this.value = PDFViewerApplication.page;
|
|
|
|
}
|
|
|
|
});
|
2012-09-07 00:33:07 +09:00
|
|
|
|
|
|
|
document.getElementById('scaleSelect').addEventListener('change',
|
|
|
|
function() {
|
2014-09-22 20:41:17 +09:00
|
|
|
PDFViewerApplication.setScale(this.value, false);
|
2012-09-07 00:33:07 +09:00
|
|
|
});
|
|
|
|
|
2013-09-05 06:48:31 +09:00
|
|
|
document.getElementById('presentationMode').addEventListener('click',
|
|
|
|
SecondaryToolbar.presentationModeClick.bind(SecondaryToolbar));
|
2012-10-11 02:26:41 +09:00
|
|
|
|
2013-09-05 06:48:31 +09:00
|
|
|
document.getElementById('openFile').addEventListener('click',
|
|
|
|
SecondaryToolbar.openFileClick.bind(SecondaryToolbar));
|
2012-10-11 02:26:41 +09:00
|
|
|
|
2013-09-05 06:48:31 +09:00
|
|
|
document.getElementById('print').addEventListener('click',
|
|
|
|
SecondaryToolbar.printClick.bind(SecondaryToolbar));
|
2012-09-08 08:05:14 +09:00
|
|
|
|
2013-09-05 06:48:31 +09:00
|
|
|
document.getElementById('download').addEventListener('click',
|
|
|
|
SecondaryToolbar.downloadClick.bind(SecondaryToolbar));
|
|
|
|
|
2012-08-16 00:17:30 +09:00
|
|
|
//#if (FIREFOX || MOZCENTRAL)
|
2014-09-22 20:41:17 +09:00
|
|
|
//PDFViewerApplication.setTitleUsingUrl(file);
|
|
|
|
//PDFViewerApplication.initPassiveLoading();
|
2013-02-07 08:19:29 +09:00
|
|
|
//return;
|
2012-08-16 00:17:30 +09:00
|
|
|
//#endif
|
|
|
|
|
2014-07-30 08:28:41 +09:00
|
|
|
//#if GENERIC
|
|
|
|
if (file && file.lastIndexOf('file:', 0) === 0) {
|
|
|
|
// file:-scheme. Load the contents in the main thread because QtWebKit
|
|
|
|
// cannot load file:-URLs in a Web Worker. file:-URLs are usually loaded
|
|
|
|
// very quickly, so there is no need to set up progress event listeners.
|
2014-09-22 20:41:17 +09:00
|
|
|
PDFViewerApplication.setTitleUsingUrl(file);
|
2014-07-30 08:28:41 +09:00
|
|
|
var xhr = new XMLHttpRequest();
|
|
|
|
xhr.onload = function() {
|
2014-09-22 20:41:17 +09:00
|
|
|
PDFViewerApplication.open(new Uint8Array(xhr.response), 0);
|
2014-07-30 08:28:41 +09:00
|
|
|
};
|
|
|
|
try {
|
|
|
|
xhr.open('GET', file);
|
|
|
|
xhr.responseType = 'arraybuffer';
|
|
|
|
xhr.send();
|
|
|
|
} catch (e) {
|
2014-09-22 20:41:17 +09:00
|
|
|
PDFViewerApplication.error(mozL10n.get('loading_error', null,
|
|
|
|
'An error occurred while loading the PDF.'), e);
|
2014-07-30 08:28:41 +09:00
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2014-02-28 02:45:02 +09:00
|
|
|
if (file) {
|
2014-09-22 20:41:17 +09:00
|
|
|
PDFViewerApplication.open(file, 0);
|
2014-02-28 02:45:02 +09:00
|
|
|
}
|
2012-07-28 07:19:43 +09:00
|
|
|
//#endif
|
2013-08-14 01:28:13 +09:00
|
|
|
//#if CHROME
|
2014-04-12 00:28:35 +09:00
|
|
|
//if (file) {
|
|
|
|
// ChromeCom.openPDFFile(file);
|
|
|
|
//}
|
2013-08-14 01:28:13 +09:00
|
|
|
//#endif
|
2014-02-28 02:45:02 +09:00
|
|
|
}
|
|
|
|
|
|
|
|
document.addEventListener('DOMContentLoaded', webViewerLoad, true);
|
2011-07-29 02:48:05 +09:00
|
|
|
|
2014-09-15 23:49:24 +09:00
|
|
|
document.addEventListener('pagerendered', function (e) {
|
2014-09-30 01:15:06 +09:00
|
|
|
var pageNumber = e.detail.pageNumber;
|
|
|
|
var pageIndex = pageNumber - 1;
|
2014-09-22 20:41:17 +09:00
|
|
|
var pageView = PDFViewerApplication.pdfViewer.getPageView(pageIndex);
|
2015-01-28 05:13:34 +09:00
|
|
|
|
|
|
|
if (PDFViewerApplication.sidebarOpen) {
|
|
|
|
var thumbnailView = PDFViewerApplication.pdfThumbnailViewer.
|
|
|
|
getThumbnail(pageIndex);
|
|
|
|
thumbnailView.setImage(pageView);
|
|
|
|
}
|
2012-08-08 08:52:22 +09:00
|
|
|
|
2014-09-30 01:15:06 +09:00
|
|
|
if (PDFJS.pdfBug && Stats.enabled && pageView.stats) {
|
|
|
|
Stats.add(pageNumber, pageView.stats);
|
|
|
|
}
|
|
|
|
|
2014-09-16 04:57:12 +09:00
|
|
|
if (pageView.error) {
|
2014-09-22 20:41:17 +09:00
|
|
|
PDFViewerApplication.error(mozL10n.get('rendering_error', null,
|
2014-09-16 04:57:12 +09:00
|
|
|
'An error occurred while rendering the page.'), pageView.error);
|
|
|
|
}
|
2012-08-08 08:52:22 +09:00
|
|
|
|
2014-07-18 20:53:04 +09:00
|
|
|
// If the page is still visible when it has finished rendering,
|
|
|
|
// ensure that the page number input loading indicator is hidden.
|
2014-09-30 01:15:06 +09:00
|
|
|
if (pageNumber === PDFViewerApplication.page) {
|
2014-07-18 20:53:04 +09:00
|
|
|
var pageNumberInput = document.getElementById('pageNumber');
|
|
|
|
pageNumberInput.classList.remove(PAGE_NUMBER_LOADING_INDICATOR);
|
|
|
|
}
|
2015-04-26 08:49:37 +09:00
|
|
|
|
|
|
|
//#if !PRODUCTION
|
2015-04-30 02:09:58 +09:00
|
|
|
if (true) {
|
|
|
|
return;
|
|
|
|
}
|
2015-04-26 08:49:37 +09:00
|
|
|
//#endif
|
|
|
|
//#if (FIREFOX || MOZCENTRAL)
|
|
|
|
FirefoxCom.request('reportTelemetry', JSON.stringify({
|
|
|
|
type: 'pageInfo'
|
|
|
|
}));
|
|
|
|
// It is a good time to report stream and font types.
|
|
|
|
PDFViewerApplication.pdfDocument.getStats().then(function (stats) {
|
|
|
|
FirefoxCom.request('reportTelemetry', JSON.stringify({
|
|
|
|
type: 'documentStats',
|
|
|
|
stats: stats
|
|
|
|
}));
|
|
|
|
});
|
|
|
|
//#endif
|
2014-09-15 23:49:24 +09:00
|
|
|
}, true);
|
2012-08-08 08:52:22 +09:00
|
|
|
|
2014-12-31 21:10:59 +09:00
|
|
|
document.addEventListener('textlayerrendered', function (e) {
|
|
|
|
var pageIndex = e.detail.pageNumber - 1;
|
|
|
|
var pageView = PDFViewerApplication.pdfViewer.getPageView(pageIndex);
|
|
|
|
|
2015-04-26 08:49:37 +09:00
|
|
|
//#if !PRODUCTION
|
2015-04-30 02:09:58 +09:00
|
|
|
if (true) {
|
|
|
|
return;
|
|
|
|
}
|
2015-04-26 08:49:37 +09:00
|
|
|
//#endif
|
2014-12-31 21:10:59 +09:00
|
|
|
//#if (FIREFOX || MOZCENTRAL)
|
2015-04-26 08:49:37 +09:00
|
|
|
if (pageView.textLayer && pageView.textLayer.textDivs &&
|
|
|
|
pageView.textLayer.textDivs.length > 0 &&
|
|
|
|
!PDFViewerApplication.supportsDocumentColors) {
|
|
|
|
console.error(mozL10n.get('document_colors_disabled', null,
|
|
|
|
'PDF documents are not allowed to use their own colors: ' +
|
|
|
|
'\'Allow pages to choose their own colors\' ' +
|
|
|
|
'is deactivated in the browser.'));
|
|
|
|
PDFViewerApplication.fallback();
|
|
|
|
}
|
2014-12-31 21:10:59 +09:00
|
|
|
//#endif
|
|
|
|
}, true);
|
|
|
|
|
2015-04-28 00:25:32 +09:00
|
|
|
document.addEventListener('namedaction', function (e) {
|
|
|
|
// Processing couple of named actions that might be useful.
|
|
|
|
// See also PDFLinkService.executeNamedAction
|
|
|
|
var action = e.action;
|
|
|
|
switch (action) {
|
|
|
|
case 'GoToPage':
|
|
|
|
document.getElementById('pageNumber').focus();
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 'Find':
|
|
|
|
if (!this.supportsIntegratedFind) {
|
|
|
|
this.findBar.toggle();
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}, true);
|
|
|
|
|
2014-09-16 02:37:03 +09:00
|
|
|
window.addEventListener('presentationmodechanged', function (e) {
|
|
|
|
var active = e.detail.active;
|
|
|
|
var switchInProgress = e.detail.switchInProgress;
|
2014-09-22 20:41:17 +09:00
|
|
|
PDFViewerApplication.pdfViewer.presentationModeState =
|
2014-09-16 02:37:03 +09:00
|
|
|
switchInProgress ? PresentationModeState.CHANGING :
|
|
|
|
active ? PresentationModeState.FULLSCREEN : PresentationModeState.NORMAL;
|
|
|
|
});
|
2012-08-08 08:52:22 +09:00
|
|
|
|
2011-09-03 10:16:52 +09:00
|
|
|
function updateViewarea() {
|
2014-09-22 20:41:17 +09:00
|
|
|
if (!PDFViewerApplication.initialized) {
|
2012-05-01 05:05:32 +09:00
|
|
|
return;
|
2012-08-08 08:52:22 +09:00
|
|
|
}
|
2014-09-22 20:41:17 +09:00
|
|
|
PDFViewerApplication.pdfViewer.update();
|
2014-09-13 11:27:45 +09:00
|
|
|
}
|
2012-07-31 00:12:49 +09:00
|
|
|
|
2015-05-08 18:48:07 +09:00
|
|
|
window.addEventListener('updateviewarea', function (evt) {
|
2014-09-22 20:41:17 +09:00
|
|
|
if (!PDFViewerApplication.initialized) {
|
2014-09-13 11:27:45 +09:00
|
|
|
return;
|
2014-02-10 21:43:26 +09:00
|
|
|
}
|
2015-05-08 18:48:07 +09:00
|
|
|
var location = evt.location;
|
2011-12-26 08:42:46 +09:00
|
|
|
|
2014-09-22 20:41:17 +09:00
|
|
|
PDFViewerApplication.store.initializedPromise.then(function() {
|
|
|
|
PDFViewerApplication.store.setMultiple({
|
2014-04-26 03:28:26 +09:00
|
|
|
'exists': true,
|
2014-09-13 11:27:45 +09:00
|
|
|
'page': location.pageNumber,
|
|
|
|
'zoom': location.scale,
|
|
|
|
'scrollLeft': location.left,
|
|
|
|
'scrollTop': location.top
|
2014-05-23 02:53:19 +09:00
|
|
|
}).catch(function() {
|
|
|
|
// unable to write to storage
|
2014-04-26 03:28:26 +09:00
|
|
|
});
|
2012-10-03 08:16:42 +09:00
|
|
|
});
|
2015-04-28 00:25:32 +09:00
|
|
|
var href =
|
|
|
|
PDFViewerApplication.pdfLinkService.getAnchorUrl(location.pdfOpenParams);
|
2012-01-25 08:46:53 +09:00
|
|
|
document.getElementById('viewBookmark').href = href;
|
2013-09-27 18:44:45 +09:00
|
|
|
document.getElementById('secondaryViewBookmark').href = href;
|
2013-05-16 07:31:17 +09:00
|
|
|
|
2013-05-19 01:18:44 +09:00
|
|
|
// Update the current bookmark in the browsing history.
|
2015-04-27 23:04:11 +09:00
|
|
|
PDFViewerApplication.pdfHistory.updateCurrentBookmark(location.pdfOpenParams,
|
|
|
|
location.pageNumber);
|
2014-07-18 20:53:04 +09:00
|
|
|
|
|
|
|
// Show/hide the loading indicator in the page number input element.
|
|
|
|
var pageNumberInput = document.getElementById('pageNumber');
|
|
|
|
var currentPage =
|
|
|
|
PDFViewerApplication.pdfViewer.getPageView(PDFViewerApplication.page - 1);
|
|
|
|
|
|
|
|
if (currentPage.renderingState === RenderingStates.FINISHED) {
|
|
|
|
pageNumberInput.classList.remove(PAGE_NUMBER_LOADING_INDICATOR);
|
|
|
|
} else {
|
|
|
|
pageNumberInput.classList.add(PAGE_NUMBER_LOADING_INDICATOR);
|
|
|
|
}
|
2014-09-13 11:27:45 +09:00
|
|
|
}, true);
|
2011-09-03 10:16:52 +09:00
|
|
|
|
2011-10-05 04:21:40 +09:00
|
|
|
window.addEventListener('resize', function webViewerResize(evt) {
|
2014-09-22 20:41:17 +09:00
|
|
|
if (PDFViewerApplication.initialized &&
|
2015-03-19 19:37:48 +09:00
|
|
|
(document.getElementById('pageAutoOption').selected ||
|
|
|
|
/* Note: the scale is constant for |pageActualOption|. */
|
2013-08-01 02:43:03 +09:00
|
|
|
document.getElementById('pageFitOption').selected ||
|
2015-03-19 19:37:48 +09:00
|
|
|
document.getElementById('pageWidthOption').selected)) {
|
2014-09-22 20:41:17 +09:00
|
|
|
var selectedScale = document.getElementById('scaleSelect').value;
|
|
|
|
PDFViewerApplication.setScale(selectedScale, false);
|
2013-08-01 02:43:03 +09:00
|
|
|
}
|
2011-09-03 10:16:52 +09:00
|
|
|
updateViewarea();
|
2013-09-05 06:48:31 +09:00
|
|
|
|
|
|
|
// Set the 'max-height' CSS property of the secondary toolbar.
|
2014-09-13 11:27:45 +09:00
|
|
|
SecondaryToolbar.setMaxHeight(document.getElementById('viewerContainer'));
|
2011-09-03 10:16:52 +09:00
|
|
|
});
|
|
|
|
|
2011-10-05 04:21:40 +09:00
|
|
|
window.addEventListener('hashchange', function webViewerHashchange(evt) {
|
2015-04-27 23:04:11 +09:00
|
|
|
if (PDFViewerApplication.pdfHistory.isHashChangeUnlocked) {
|
2015-04-28 00:25:32 +09:00
|
|
|
var hash = document.location.hash.substring(1);
|
|
|
|
if (!hash) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (!PDFViewerApplication.isInitialViewSet) {
|
|
|
|
PDFViewerApplication.initialBookmark = hash;
|
|
|
|
} else {
|
|
|
|
PDFViewerApplication.pdfLinkService.setHash(hash);
|
|
|
|
}
|
2013-05-16 07:31:17 +09:00
|
|
|
}
|
2011-07-29 02:48:05 +09:00
|
|
|
});
|
|
|
|
|
2015-04-30 02:09:58 +09:00
|
|
|
//#if GENERIC
|
2011-10-05 04:21:40 +09:00
|
|
|
window.addEventListener('change', function webViewerChange(evt) {
|
2011-07-29 02:48:05 +09:00
|
|
|
var files = evt.target.files;
|
2014-03-09 20:20:32 +09:00
|
|
|
if (!files || files.length === 0) {
|
2011-07-29 02:48:05 +09:00
|
|
|
return;
|
2014-03-09 20:20:32 +09:00
|
|
|
}
|
2011-07-29 02:48:05 +09:00
|
|
|
var file = files[0];
|
2014-01-28 04:11:02 +09:00
|
|
|
|
|
|
|
if (!PDFJS.disableCreateObjectURL &&
|
|
|
|
typeof URL !== 'undefined' && URL.createObjectURL) {
|
2014-09-22 20:41:17 +09:00
|
|
|
PDFViewerApplication.open(URL.createObjectURL(file), 0);
|
2014-01-28 04:11:02 +09:00
|
|
|
} else {
|
|
|
|
// Read the local file into a Uint8Array.
|
|
|
|
var fileReader = new FileReader();
|
|
|
|
fileReader.onload = function webViewerChangeFileReaderOnload(evt) {
|
|
|
|
var buffer = evt.target.result;
|
|
|
|
var uint8Array = new Uint8Array(buffer);
|
2014-09-22 20:41:17 +09:00
|
|
|
PDFViewerApplication.open(uint8Array, 0);
|
2014-01-28 04:11:02 +09:00
|
|
|
};
|
|
|
|
fileReader.readAsArrayBuffer(file);
|
|
|
|
}
|
|
|
|
|
2014-09-22 20:41:17 +09:00
|
|
|
PDFViewerApplication.setTitleUsingUrl(file.name);
|
2011-10-15 11:05:57 +09:00
|
|
|
|
2011-10-19 10:20:50 +09:00
|
|
|
// URL does not reflect proper document location - hiding some icons.
|
2011-10-19 06:39:26 +09:00
|
|
|
document.getElementById('viewBookmark').setAttribute('hidden', 'true');
|
2013-09-27 18:44:45 +09:00
|
|
|
document.getElementById('secondaryViewBookmark').
|
|
|
|
setAttribute('hidden', 'true');
|
2011-10-19 10:20:50 +09:00
|
|
|
document.getElementById('download').setAttribute('hidden', 'true');
|
2013-09-05 06:48:31 +09:00
|
|
|
document.getElementById('secondaryDownload').setAttribute('hidden', 'true');
|
2011-07-29 02:48:05 +09:00
|
|
|
}, true);
|
2014-01-28 04:11:02 +09:00
|
|
|
//#endif
|
2011-07-29 02:48:05 +09:00
|
|
|
|
2012-01-03 04:09:38 +09:00
|
|
|
function selectScaleOption(value) {
|
2011-07-30 01:17:04 +09:00
|
|
|
var options = document.getElementById('scaleSelect').options;
|
2011-09-03 10:16:52 +09:00
|
|
|
var predefinedValueFound = false;
|
2011-07-30 01:17:04 +09:00
|
|
|
for (var i = 0; i < options.length; i++) {
|
|
|
|
var option = options[i];
|
2014-08-01 04:49:29 +09:00
|
|
|
if (option.value !== value) {
|
2011-09-03 10:16:52 +09:00
|
|
|
option.selected = false;
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
option.selected = true;
|
|
|
|
predefinedValueFound = true;
|
2011-07-30 01:17:04 +09:00
|
|
|
}
|
2012-01-03 04:09:38 +09:00
|
|
|
return predefinedValueFound;
|
|
|
|
}
|
|
|
|
|
2012-05-02 07:08:30 +09:00
|
|
|
window.addEventListener('localized', function localized(evt) {
|
2012-11-30 05:02:33 +09:00
|
|
|
document.getElementsByTagName('html')[0].dir = mozL10n.getDirection();
|
2013-01-27 06:17:37 +09:00
|
|
|
|
2014-09-22 20:41:17 +09:00
|
|
|
PDFViewerApplication.animationStartedPromise.then(function() {
|
2013-09-05 06:48:31 +09:00
|
|
|
// Adjust the width of the zoom box to fit the content.
|
2014-08-21 20:02:19 +09:00
|
|
|
// Note: If the window is narrow enough that the zoom box is not visible,
|
|
|
|
// we temporarily show it to be able to adjust its width.
|
2013-06-02 21:31:28 +09:00
|
|
|
var container = document.getElementById('scaleSelectContainer');
|
2014-08-21 20:02:19 +09:00
|
|
|
if (container.clientWidth === 0) {
|
|
|
|
container.setAttribute('style', 'display: inherit;');
|
|
|
|
}
|
2013-06-02 21:31:28 +09:00
|
|
|
if (container.clientWidth > 0) {
|
2013-02-27 02:46:50 +09:00
|
|
|
var select = document.getElementById('scaleSelect');
|
|
|
|
select.setAttribute('style', 'min-width: inherit;');
|
2013-06-02 21:31:28 +09:00
|
|
|
var width = select.clientWidth + SCALE_SELECT_CONTAINER_PADDING;
|
|
|
|
select.setAttribute('style', 'min-width: ' +
|
|
|
|
(width + SCALE_SELECT_PADDING) + 'px;');
|
2013-02-27 02:46:50 +09:00
|
|
|
container.setAttribute('style', 'min-width: ' + width + 'px; ' +
|
|
|
|
'max-width: ' + width + 'px;');
|
2013-06-02 21:31:28 +09:00
|
|
|
}
|
2013-09-05 06:48:31 +09:00
|
|
|
|
|
|
|
// Set the 'max-height' CSS property of the secondary toolbar.
|
2014-09-13 11:27:45 +09:00
|
|
|
SecondaryToolbar.setMaxHeight(document.getElementById('viewerContainer'));
|
2013-02-27 02:46:50 +09:00
|
|
|
});
|
2012-05-02 07:08:30 +09:00
|
|
|
}, true);
|
|
|
|
|
2012-01-03 04:09:38 +09:00
|
|
|
window.addEventListener('scalechange', function scalechange(evt) {
|
2013-05-01 04:14:18 +09:00
|
|
|
document.getElementById('zoomOut').disabled = (evt.scale === MIN_SCALE);
|
|
|
|
document.getElementById('zoomIn').disabled = (evt.scale === MAX_SCALE);
|
|
|
|
|
2012-01-03 04:09:38 +09:00
|
|
|
var customScaleOption = document.getElementById('customScaleOption');
|
|
|
|
customScaleOption.selected = false;
|
|
|
|
|
2014-09-22 20:41:17 +09:00
|
|
|
if (!PDFViewerApplication.updateScaleControls &&
|
2015-03-19 19:37:48 +09:00
|
|
|
(document.getElementById('pageAutoOption').selected ||
|
|
|
|
document.getElementById('pageActualOption').selected ||
|
2013-08-01 02:43:03 +09:00
|
|
|
document.getElementById('pageFitOption').selected ||
|
2015-03-19 19:37:48 +09:00
|
|
|
document.getElementById('pageWidthOption').selected)) {
|
2013-08-01 02:43:03 +09:00
|
|
|
updateViewarea();
|
|
|
|
return;
|
2012-01-03 04:09:38 +09:00
|
|
|
}
|
2011-09-03 10:16:52 +09:00
|
|
|
|
2014-09-13 11:27:45 +09:00
|
|
|
if (evt.presetValue) {
|
|
|
|
selectScaleOption(evt.presetValue);
|
|
|
|
updateViewarea();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2012-01-04 06:48:32 +09:00
|
|
|
var predefinedValueFound = selectScaleOption('' + evt.scale);
|
2011-09-03 10:16:52 +09:00
|
|
|
if (!predefinedValueFound) {
|
2014-10-16 21:36:03 +09:00
|
|
|
var customScale = Math.round(evt.scale * 10000) / 100;
|
|
|
|
customScaleOption.textContent =
|
|
|
|
mozL10n.get('page_scale_percent', { scale: customScale }, '{{scale}}%');
|
2011-09-03 10:16:52 +09:00
|
|
|
customScaleOption.selected = true;
|
|
|
|
}
|
|
|
|
updateViewarea();
|
2011-07-30 01:17:04 +09:00
|
|
|
}, true);
|
|
|
|
|
2011-08-31 07:37:39 +09:00
|
|
|
window.addEventListener('pagechange', function pagechange(evt) {
|
2011-10-15 11:05:57 +09:00
|
|
|
var page = evt.pageNumber;
|
2014-09-21 02:15:18 +09:00
|
|
|
if (evt.previousPageNumber !== page) {
|
2011-10-15 11:05:57 +09:00
|
|
|
document.getElementById('pageNumber').value = page;
|
2015-01-28 05:08:36 +09:00
|
|
|
if (PDFViewerApplication.sidebarOpen) {
|
|
|
|
PDFViewerApplication.pdfThumbnailViewer.scrollThumbnailIntoView(page);
|
|
|
|
}
|
2012-04-14 06:14:05 +09:00
|
|
|
}
|
2014-09-22 20:41:17 +09:00
|
|
|
var numPages = PDFViewerApplication.pagesCount;
|
2014-08-12 19:34:27 +09:00
|
|
|
|
2011-10-15 11:05:57 +09:00
|
|
|
document.getElementById('previous').disabled = (page <= 1);
|
2014-08-12 19:34:27 +09:00
|
|
|
document.getElementById('next').disabled = (page >= numPages);
|
|
|
|
|
|
|
|
document.getElementById('firstPage').disabled = (page <= 1);
|
|
|
|
document.getElementById('lastPage').disabled = (page >= numPages);
|
2014-09-13 11:27:45 +09:00
|
|
|
|
2014-09-30 01:15:06 +09:00
|
|
|
// we need to update stats
|
|
|
|
if (PDFJS.pdfBug && Stats.enabled) {
|
|
|
|
var pageView = PDFViewerApplication.pdfViewer.getPageView(page - 1);
|
|
|
|
if (pageView.stats) {
|
|
|
|
Stats.add(page, pageView.stats);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-09-13 11:27:45 +09:00
|
|
|
// checking if the this.page was called from the updateViewarea function
|
|
|
|
if (evt.updateInProgress) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
// Avoid scrolling the first page during loading
|
|
|
|
if (this.loading && page === 1) {
|
|
|
|
return;
|
|
|
|
}
|
2014-09-30 21:13:46 +09:00
|
|
|
PDFViewerApplication.pdfViewer.scrollPageIntoView(page);
|
2011-07-30 01:17:04 +09:00
|
|
|
}, true);
|
2011-09-03 10:16:52 +09:00
|
|
|
|
2014-01-29 04:52:25 +09:00
|
|
|
function handleMouseWheel(evt) {
|
|
|
|
var MOUSE_WHEEL_DELTA_FACTOR = 40;
|
|
|
|
var ticks = (evt.type === 'DOMMouseScroll') ? -evt.detail :
|
|
|
|
evt.wheelDelta / MOUSE_WHEEL_DELTA_FACTOR;
|
|
|
|
var direction = (ticks < 0) ? 'zoomOut' : 'zoomIn';
|
2012-06-08 04:27:26 +09:00
|
|
|
|
2015-01-29 21:37:49 +09:00
|
|
|
if (PDFViewerApplication.pdfViewer.isInPresentationMode) {
|
2014-01-29 04:52:25 +09:00
|
|
|
evt.preventDefault();
|
2015-02-01 00:46:23 +09:00
|
|
|
PDFViewerApplication.scrollPresentationMode(ticks *
|
|
|
|
MOUSE_WHEEL_DELTA_FACTOR);
|
2015-04-10 08:51:16 +09:00
|
|
|
} else if (evt.ctrlKey || evt.metaKey) {
|
2015-02-01 00:46:23 +09:00
|
|
|
// Only zoom the pages, not the entire viewer.
|
2014-10-16 05:03:13 +09:00
|
|
|
evt.preventDefault();
|
|
|
|
PDFViewerApplication[direction](Math.abs(ticks));
|
2012-06-08 04:27:26 +09:00
|
|
|
}
|
2014-01-29 04:52:25 +09:00
|
|
|
}
|
|
|
|
|
|
|
|
window.addEventListener('DOMMouseScroll', handleMouseWheel);
|
|
|
|
window.addEventListener('mousewheel', handleMouseWheel);
|
2012-06-08 04:27:26 +09:00
|
|
|
|
2013-02-28 23:35:41 +09:00
|
|
|
window.addEventListener('click', function click(evt) {
|
2015-02-01 19:31:18 +09:00
|
|
|
if (SecondaryToolbar.opened &&
|
|
|
|
PDFViewerApplication.pdfViewer.containsElement(evt.target)) {
|
|
|
|
SecondaryToolbar.close();
|
2012-10-06 11:55:47 +09:00
|
|
|
}
|
|
|
|
}, false);
|
|
|
|
|
2011-09-05 23:07:18 +09:00
|
|
|
window.addEventListener('keydown', function keydown(evt) {
|
2014-05-13 19:08:39 +09:00
|
|
|
if (OverlayManager.active) {
|
2013-09-25 00:46:54 +09:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2012-04-12 07:47:11 +09:00
|
|
|
var handled = false;
|
2012-04-20 03:13:56 +09:00
|
|
|
var cmd = (evt.ctrlKey ? 1 : 0) |
|
|
|
|
(evt.altKey ? 2 : 0) |
|
|
|
|
(evt.shiftKey ? 4 : 0) |
|
|
|
|
(evt.metaKey ? 8 : 0);
|
2012-04-12 07:47:11 +09:00
|
|
|
|
2015-01-29 21:37:49 +09:00
|
|
|
var pdfViewer = PDFViewerApplication.pdfViewer;
|
|
|
|
var isViewerInPresentationMode = pdfViewer && pdfViewer.isInPresentationMode;
|
|
|
|
|
2012-04-12 07:47:11 +09:00
|
|
|
// First, handle the key bindings that are independent whether an input
|
|
|
|
// control is selected or not.
|
2013-03-12 01:04:43 +09:00
|
|
|
if (cmd === 1 || cmd === 8 || cmd === 5 || cmd === 12) {
|
|
|
|
// either CTRL or META key with optional SHIFT.
|
2012-04-12 07:47:11 +09:00
|
|
|
switch (evt.keyCode) {
|
2013-07-18 20:37:55 +09:00
|
|
|
case 70: // f
|
2014-09-22 20:41:17 +09:00
|
|
|
if (!PDFViewerApplication.supportsIntegratedFind) {
|
|
|
|
PDFViewerApplication.findBar.open();
|
2012-10-06 05:59:13 +09:00
|
|
|
handled = true;
|
|
|
|
}
|
2012-09-12 01:30:44 +09:00
|
|
|
break;
|
2013-07-18 20:37:55 +09:00
|
|
|
case 71: // g
|
2014-09-22 20:41:17 +09:00
|
|
|
if (!PDFViewerApplication.supportsIntegratedFind) {
|
|
|
|
PDFViewerApplication.findBar.dispatchEvent('again',
|
|
|
|
cmd === 5 || cmd === 12);
|
2013-07-18 20:37:55 +09:00
|
|
|
handled = true;
|
|
|
|
}
|
|
|
|
break;
|
2012-04-12 07:47:11 +09:00
|
|
|
case 61: // FF/Mac '='
|
|
|
|
case 107: // FF '+' and '='
|
|
|
|
case 187: // Chrome '+'
|
2012-12-11 06:39:35 +09:00
|
|
|
case 171: // FF with German keyboard
|
2015-01-29 21:37:49 +09:00
|
|
|
if (!isViewerInPresentationMode) {
|
2014-10-16 05:03:13 +09:00
|
|
|
PDFViewerApplication.zoomIn();
|
|
|
|
}
|
2012-04-12 07:47:11 +09:00
|
|
|
handled = true;
|
|
|
|
break;
|
2012-09-11 01:28:45 +09:00
|
|
|
case 173: // FF/Mac '-'
|
2012-04-12 07:47:11 +09:00
|
|
|
case 109: // FF '-'
|
|
|
|
case 189: // Chrome '-'
|
2015-01-29 21:37:49 +09:00
|
|
|
if (!isViewerInPresentationMode) {
|
2014-10-16 05:03:13 +09:00
|
|
|
PDFViewerApplication.zoomOut();
|
|
|
|
}
|
2012-04-12 07:47:11 +09:00
|
|
|
handled = true;
|
|
|
|
break;
|
|
|
|
case 48: // '0'
|
2012-12-12 07:59:33 +09:00
|
|
|
case 96: // '0' on Numpad of Swedish keyboard
|
2015-01-29 21:37:49 +09:00
|
|
|
if (!isViewerInPresentationMode) {
|
2014-10-16 05:03:13 +09:00
|
|
|
// keeping it unhandled (to restore page zoom to 100%)
|
|
|
|
setTimeout(function () {
|
|
|
|
// ... and resetting the scale after browser adjusts its scale
|
|
|
|
PDFViewerApplication.setScale(DEFAULT_SCALE, true);
|
|
|
|
});
|
|
|
|
handled = false;
|
|
|
|
}
|
2012-04-12 07:47:11 +09:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-02-28 00:08:43 +09:00
|
|
|
//#if !(FIREFOX || MOZCENTRAL)
|
|
|
|
// CTRL or META without shift
|
|
|
|
if (cmd === 1 || cmd === 8) {
|
|
|
|
switch (evt.keyCode) {
|
|
|
|
case 83: // s
|
2014-09-22 20:41:17 +09:00
|
|
|
PDFViewerApplication.download();
|
2014-02-28 00:08:43 +09:00
|
|
|
handled = true;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//#endif
|
|
|
|
|
2013-07-18 23:28:06 +09:00
|
|
|
// CTRL+ALT or Option+Command
|
|
|
|
if (cmd === 3 || cmd === 10) {
|
|
|
|
switch (evt.keyCode) {
|
|
|
|
case 80: // p
|
2015-01-29 21:37:49 +09:00
|
|
|
PDFViewerApplication.requestPresentationMode();
|
2013-07-18 23:28:06 +09:00
|
|
|
handled = true;
|
|
|
|
break;
|
2013-11-12 13:47:03 +09:00
|
|
|
case 71: // g
|
|
|
|
// focuses input#pageNumber field
|
|
|
|
document.getElementById('pageNumber').select();
|
|
|
|
handled = true;
|
|
|
|
break;
|
2013-07-18 23:28:06 +09:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2012-04-12 07:47:11 +09:00
|
|
|
if (handled) {
|
|
|
|
evt.preventDefault();
|
2011-12-26 06:18:52 +09:00
|
|
|
return;
|
2012-04-12 07:47:11 +09:00
|
|
|
}
|
|
|
|
|
|
|
|
// Some shortcuts should not get handled if a control/input element
|
|
|
|
// is selected.
|
2013-03-31 02:12:32 +09:00
|
|
|
var curElement = document.activeElement || document.querySelector(':focus');
|
2014-01-31 00:54:12 +09:00
|
|
|
var curElementTagName = curElement && curElement.tagName.toUpperCase();
|
|
|
|
if (curElementTagName === 'INPUT' ||
|
|
|
|
curElementTagName === 'TEXTAREA' ||
|
|
|
|
curElementTagName === 'SELECT') {
|
2013-09-05 06:48:31 +09:00
|
|
|
// Make sure that the secondary toolbar is closed when Escape is pressed.
|
|
|
|
if (evt.keyCode !== 27) { // 'Esc'
|
|
|
|
return;
|
|
|
|
}
|
2012-10-02 06:32:02 +09:00
|
|
|
}
|
2012-04-11 01:55:52 +09:00
|
|
|
|
2013-02-05 03:01:19 +09:00
|
|
|
if (cmd === 0) { // no control key pressed at all.
|
2012-04-11 01:55:52 +09:00
|
|
|
switch (evt.keyCode) {
|
2012-10-06 11:55:47 +09:00
|
|
|
case 38: // up arrow
|
|
|
|
case 33: // pg up
|
|
|
|
case 8: // backspace
|
2015-01-29 21:37:49 +09:00
|
|
|
if (!isViewerInPresentationMode &&
|
|
|
|
PDFViewerApplication.currentScaleValue !== 'page-fit') {
|
2012-10-06 11:55:47 +09:00
|
|
|
break;
|
|
|
|
}
|
2013-03-02 05:54:02 +09:00
|
|
|
/* in presentation mode */
|
2013-02-05 03:01:19 +09:00
|
|
|
/* falls through */
|
2012-04-11 01:55:52 +09:00
|
|
|
case 37: // left arrow
|
2012-12-14 05:10:21 +09:00
|
|
|
// horizontal scrolling using arrow keys
|
2015-01-29 21:37:49 +09:00
|
|
|
if (pdfViewer.isHorizontalScrollbarEnabled) {
|
2012-12-14 05:10:21 +09:00
|
|
|
break;
|
|
|
|
}
|
2013-02-05 03:01:19 +09:00
|
|
|
/* falls through */
|
2012-04-11 01:55:52 +09:00
|
|
|
case 75: // 'k'
|
|
|
|
case 80: // 'p'
|
2014-09-22 20:41:17 +09:00
|
|
|
PDFViewerApplication.page--;
|
2012-04-11 01:55:52 +09:00
|
|
|
handled = true;
|
|
|
|
break;
|
2013-02-11 00:14:17 +09:00
|
|
|
case 27: // esc key
|
2013-10-19 06:03:28 +09:00
|
|
|
if (SecondaryToolbar.opened) {
|
2013-09-05 06:48:31 +09:00
|
|
|
SecondaryToolbar.close();
|
|
|
|
handled = true;
|
|
|
|
}
|
2014-09-22 20:41:17 +09:00
|
|
|
if (!PDFViewerApplication.supportsIntegratedFind &&
|
|
|
|
PDFViewerApplication.findBar.opened) {
|
|
|
|
PDFViewerApplication.findBar.close();
|
2013-02-11 00:14:17 +09:00
|
|
|
handled = true;
|
|
|
|
}
|
|
|
|
break;
|
2012-10-06 11:55:47 +09:00
|
|
|
case 40: // down arrow
|
|
|
|
case 34: // pg down
|
|
|
|
case 32: // spacebar
|
2015-01-29 21:37:49 +09:00
|
|
|
if (!isViewerInPresentationMode &&
|
2014-09-22 20:41:17 +09:00
|
|
|
PDFViewerApplication.currentScaleValue !== 'page-fit') {
|
2012-10-06 11:55:47 +09:00
|
|
|
break;
|
|
|
|
}
|
2013-02-05 03:01:19 +09:00
|
|
|
/* falls through */
|
2012-04-11 01:55:52 +09:00
|
|
|
case 39: // right arrow
|
2012-12-14 05:10:21 +09:00
|
|
|
// horizontal scrolling using arrow keys
|
2015-01-29 21:37:49 +09:00
|
|
|
if (pdfViewer.isHorizontalScrollbarEnabled) {
|
2012-12-14 05:10:21 +09:00
|
|
|
break;
|
|
|
|
}
|
2013-02-05 03:01:19 +09:00
|
|
|
/* falls through */
|
2012-04-11 01:55:52 +09:00
|
|
|
case 74: // 'j'
|
|
|
|
case 78: // 'n'
|
2014-09-22 20:41:17 +09:00
|
|
|
PDFViewerApplication.page++;
|
2012-04-11 01:55:52 +09:00
|
|
|
handled = true;
|
|
|
|
break;
|
2012-07-31 00:12:49 +09:00
|
|
|
|
2012-10-06 11:55:47 +09:00
|
|
|
case 36: // home
|
2015-01-29 21:37:49 +09:00
|
|
|
if (isViewerInPresentationMode || PDFViewerApplication.page > 1) {
|
2014-09-22 20:41:17 +09:00
|
|
|
PDFViewerApplication.page = 1;
|
2012-10-06 11:55:47 +09:00
|
|
|
handled = true;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 35: // end
|
2015-01-29 21:37:49 +09:00
|
|
|
if (isViewerInPresentationMode || (PDFViewerApplication.pdfDocument &&
|
2014-09-22 20:41:17 +09:00
|
|
|
PDFViewerApplication.page < PDFViewerApplication.pagesCount)) {
|
|
|
|
PDFViewerApplication.page = PDFViewerApplication.pagesCount;
|
2012-07-31 00:12:49 +09:00
|
|
|
handled = true;
|
|
|
|
}
|
|
|
|
break;
|
2012-09-08 08:05:14 +09:00
|
|
|
|
2013-10-03 05:09:43 +09:00
|
|
|
case 72: // 'h'
|
2015-01-29 21:37:49 +09:00
|
|
|
if (!isViewerInPresentationMode) {
|
2013-10-03 05:09:43 +09:00
|
|
|
HandTool.toggle();
|
|
|
|
}
|
|
|
|
break;
|
2012-09-08 08:05:14 +09:00
|
|
|
case 82: // 'r'
|
2014-09-22 20:41:17 +09:00
|
|
|
PDFViewerApplication.rotatePages(90);
|
2012-09-08 08:05:14 +09:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-05-16 07:31:17 +09:00
|
|
|
if (cmd === 4) { // shift-key
|
2012-09-08 08:05:14 +09:00
|
|
|
switch (evt.keyCode) {
|
2013-06-27 05:25:47 +09:00
|
|
|
case 32: // spacebar
|
2015-01-29 21:37:49 +09:00
|
|
|
if (!isViewerInPresentationMode &&
|
2014-09-22 20:41:17 +09:00
|
|
|
PDFViewerApplication.currentScaleValue !== 'page-fit') {
|
2013-06-27 05:25:47 +09:00
|
|
|
break;
|
|
|
|
}
|
2014-09-22 20:41:17 +09:00
|
|
|
PDFViewerApplication.page--;
|
2013-06-27 05:25:47 +09:00
|
|
|
handled = true;
|
|
|
|
break;
|
|
|
|
|
2012-09-08 08:05:14 +09:00
|
|
|
case 82: // 'r'
|
2014-09-22 20:41:17 +09:00
|
|
|
PDFViewerApplication.rotatePages(-90);
|
2012-09-08 08:05:14 +09:00
|
|
|
break;
|
2012-04-11 01:55:52 +09:00
|
|
|
}
|
2011-09-03 10:16:52 +09:00
|
|
|
}
|
2011-12-19 04:42:06 +09:00
|
|
|
|
2015-01-29 21:37:49 +09:00
|
|
|
if (!handled && !isViewerInPresentationMode) {
|
2014-02-27 21:33:35 +09:00
|
|
|
// 33=Page Up 34=Page Down 35=End 36=Home
|
|
|
|
// 37=Left 38=Up 39=Right 40=Down
|
|
|
|
if (evt.keyCode >= 33 && evt.keyCode <= 40 &&
|
2015-01-29 21:37:49 +09:00
|
|
|
!pdfViewer.containsElement(curElement)) {
|
2014-02-27 21:33:35 +09:00
|
|
|
// The page container is not focused, but a page navigation key has been
|
|
|
|
// pressed. Change the focus to the viewer container to make sure that
|
|
|
|
// navigation by keyboard works as expected.
|
2015-01-29 21:37:49 +09:00
|
|
|
pdfViewer.focus();
|
2014-02-27 21:33:35 +09:00
|
|
|
}
|
|
|
|
// 32=Spacebar
|
2015-04-22 00:11:09 +09:00
|
|
|
if (evt.keyCode === 32 && curElementTagName !== 'BUTTON' &&
|
|
|
|
!pdfViewer.containsElement(curElement)) {
|
|
|
|
pdfViewer.focus();
|
2014-02-27 21:33:35 +09:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-05-16 07:31:17 +09:00
|
|
|
if (cmd === 2) { // alt-key
|
|
|
|
switch (evt.keyCode) {
|
|
|
|
case 37: // left arrow
|
2015-01-29 21:37:49 +09:00
|
|
|
if (isViewerInPresentationMode) {
|
2015-04-27 23:04:11 +09:00
|
|
|
PDFViewerApplication.pdfHistory.back();
|
2013-05-16 07:31:17 +09:00
|
|
|
handled = true;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 39: // right arrow
|
2015-01-29 21:37:49 +09:00
|
|
|
if (isViewerInPresentationMode) {
|
2015-04-27 23:04:11 +09:00
|
|
|
PDFViewerApplication.pdfHistory.forward();
|
2013-05-16 07:31:17 +09:00
|
|
|
handled = true;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2011-12-19 04:42:06 +09:00
|
|
|
if (handled) {
|
|
|
|
evt.preventDefault();
|
|
|
|
}
|
2011-09-03 10:16:52 +09:00
|
|
|
});
|
2012-06-29 01:50:25 +09:00
|
|
|
|
|
|
|
window.addEventListener('beforeprint', function beforePrint(evt) {
|
2014-09-22 20:41:17 +09:00
|
|
|
PDFViewerApplication.beforePrint();
|
2012-06-29 01:50:25 +09:00
|
|
|
});
|
|
|
|
|
|
|
|
window.addEventListener('afterprint', function afterPrint(evt) {
|
2014-09-22 20:41:17 +09:00
|
|
|
PDFViewerApplication.afterPrint();
|
2012-06-29 01:50:25 +09:00
|
|
|
});
|
2012-07-31 00:12:49 +09:00
|
|
|
|
2013-01-26 04:58:49 +09:00
|
|
|
(function animationStartedClosure() {
|
|
|
|
// The offsetParent is not set until the pdf.js iframe or object is visible.
|
|
|
|
// Waiting for first animation.
|
2014-09-22 20:41:17 +09:00
|
|
|
PDFViewerApplication.animationStartedPromise = new Promise(
|
|
|
|
function (resolve) {
|
2014-05-09 21:00:47 +09:00
|
|
|
window.requestAnimationFrame(resolve);
|
2013-01-26 04:58:49 +09:00
|
|
|
});
|
|
|
|
})();
|
|
|
|
|
2012-07-28 07:19:43 +09:00
|
|
|
//#if B2G
|
2012-08-02 03:29:13 +09:00
|
|
|
//window.navigator.mozSetMessageHandler('activity', function(activity) {
|
2014-06-17 09:06:36 +09:00
|
|
|
// var blob = activity.source.data.blob;
|
2013-07-11 01:52:37 +09:00
|
|
|
// PDFJS.maxImageSize = 1024 * 1024;
|
2015-05-05 08:04:45 +09:00
|
|
|
// var fileURL = activity.source.data.url ||
|
|
|
|
// activity.source.data.filename ||
|
|
|
|
// " "; // if no url or filename, use a non-empty string
|
2014-06-17 09:06:36 +09:00
|
|
|
//
|
|
|
|
// var url = URL.createObjectURL(blob);
|
2015-01-09 22:46:34 +09:00
|
|
|
// // We need to delay opening until all HTML is loaded.
|
|
|
|
// PDFViewerApplication.animationStartedPromise.then(function () {
|
|
|
|
// PDFViewerApplication.open({url : url, originalUrl: fileURL});
|
2014-06-17 09:06:36 +09:00
|
|
|
//
|
2015-01-09 22:46:34 +09:00
|
|
|
// var header = document.getElementById('header');
|
|
|
|
// header.addEventListener('action', function() {
|
|
|
|
// activity.postResult('close');
|
|
|
|
// });
|
2012-08-02 03:29:13 +09:00
|
|
|
// });
|
|
|
|
//});
|
2012-07-28 07:19:43 +09:00
|
|
|
//#endif
|