fork from https://github.com/mozilla/pdf.js.git
This commit is contained in:
394
web/viewer.js
Normal file
394
web/viewer.js
Normal file
@@ -0,0 +1,394 @@
|
||||
/* Copyright 2016 Mozilla Foundation
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { ScrollMode, SpreadMode } from "./ui_utils.js";
|
||||
import { AppOptions } from "./app_options.js";
|
||||
import { LinkTarget } from "./pdf_link_service.js";
|
||||
import { PDFViewerApplication } from "./app.js";
|
||||
import { RenderingStates } from "./renderable_view.js";
|
||||
|
||||
const AppConstants =
|
||||
typeof PDFJSDev === "undefined" || PDFJSDev.test("GENERIC")
|
||||
? { LinkTarget, RenderingStates, ScrollMode, SpreadMode }
|
||||
: null;
|
||||
|
||||
window.PDFViewerApplication = PDFViewerApplication;
|
||||
window.PDFViewerApplicationConstants = AppConstants;
|
||||
window.PDFViewerApplicationOptions = AppOptions;
|
||||
|
||||
function getViewerConfiguration() {
|
||||
return {
|
||||
appContainer: document.body,
|
||||
principalContainer: document.getElementById("mainContainer"),
|
||||
mainContainer: document.getElementById("viewerContainer"),
|
||||
viewerContainer: document.getElementById("viewer"),
|
||||
viewerAlert: document.getElementById("viewer-alert"),
|
||||
toolbar: {
|
||||
container: document.getElementById("toolbarContainer"),
|
||||
numPages: document.getElementById("numPages"),
|
||||
pageNumber: document.getElementById("pageNumber"),
|
||||
scaleSelect: document.getElementById("scaleSelect"),
|
||||
customScaleOption: document.getElementById("customScaleOption"),
|
||||
previous: document.getElementById("previous"),
|
||||
next: document.getElementById("next"),
|
||||
zoomIn: document.getElementById("zoomInButton"),
|
||||
zoomOut: document.getElementById("zoomOutButton"),
|
||||
print: document.getElementById("printButton"),
|
||||
editorCommentButton: document.getElementById("editorCommentButton"),
|
||||
editorCommentParamsToolbar: document.getElementById(
|
||||
"editorCommentParamsToolbar"
|
||||
),
|
||||
editorFreeTextButton: document.getElementById("editorFreeTextButton"),
|
||||
editorFreeTextParamsToolbar: document.getElementById(
|
||||
"editorFreeTextParamsToolbar"
|
||||
),
|
||||
editorHighlightButton: document.getElementById("editorHighlightButton"),
|
||||
editorHighlightParamsToolbar: document.getElementById(
|
||||
"editorHighlightParamsToolbar"
|
||||
),
|
||||
editorHighlightColorPicker: document.getElementById(
|
||||
"editorHighlightColorPicker"
|
||||
),
|
||||
editorInkButton: document.getElementById("editorInkButton"),
|
||||
editorInkParamsToolbar: document.getElementById("editorInkParamsToolbar"),
|
||||
editorStampButton: document.getElementById("editorStampButton"),
|
||||
editorStampParamsToolbar: document.getElementById(
|
||||
"editorStampParamsToolbar"
|
||||
),
|
||||
editorSignatureButton: document.getElementById("editorSignatureButton"),
|
||||
editorSignatureParamsToolbar: document.getElementById(
|
||||
"editorSignatureParamsToolbar"
|
||||
),
|
||||
download: document.getElementById("downloadButton"),
|
||||
},
|
||||
secondaryToolbar: {
|
||||
toolbar: document.getElementById("secondaryToolbar"),
|
||||
toggleButton: document.getElementById("secondaryToolbarToggleButton"),
|
||||
presentationModeButton: document.getElementById("presentationMode"),
|
||||
openFileButton:
|
||||
typeof PDFJSDev === "undefined" || PDFJSDev.test("GENERIC")
|
||||
? document.getElementById("secondaryOpenFile")
|
||||
: null,
|
||||
printButton: document.getElementById("secondaryPrint"),
|
||||
downloadButton: document.getElementById("secondaryDownload"),
|
||||
viewBookmarkButton: document.getElementById("viewBookmark"),
|
||||
firstPageButton: document.getElementById("firstPage"),
|
||||
lastPageButton: document.getElementById("lastPage"),
|
||||
pageRotateCwButton: document.getElementById("pageRotateCw"),
|
||||
pageRotateCcwButton: document.getElementById("pageRotateCcw"),
|
||||
cursorSelectToolButton: document.getElementById("cursorSelectTool"),
|
||||
cursorHandToolButton: document.getElementById("cursorHandTool"),
|
||||
scrollPageButton: document.getElementById("scrollPage"),
|
||||
scrollVerticalButton: document.getElementById("scrollVertical"),
|
||||
scrollHorizontalButton: document.getElementById("scrollHorizontal"),
|
||||
scrollWrappedButton: document.getElementById("scrollWrapped"),
|
||||
spreadNoneButton: document.getElementById("spreadNone"),
|
||||
spreadOddButton: document.getElementById("spreadOdd"),
|
||||
spreadEvenButton: document.getElementById("spreadEven"),
|
||||
imageAltTextSettingsButton: document.getElementById(
|
||||
"imageAltTextSettings"
|
||||
),
|
||||
imageAltTextSettingsSeparator: document.getElementById(
|
||||
"imageAltTextSettingsSeparator"
|
||||
),
|
||||
documentPropertiesButton: document.getElementById("documentProperties"),
|
||||
},
|
||||
viewsManager: {
|
||||
outerContainer: document.getElementById("outerContainer"),
|
||||
toggleButton: document.getElementById("viewsManagerToggleButton"),
|
||||
sidebarContainer: document.getElementById("viewsManager"),
|
||||
resizer: document.getElementById("viewsManagerResizer"),
|
||||
thumbnailButton: document.getElementById("thumbnailsViewMenu"),
|
||||
outlineButton: document.getElementById("outlinesViewMenu"),
|
||||
attachmentsButton: document.getElementById("attachmentsViewMenu"),
|
||||
layersButton: document.getElementById("layersViewMenu"),
|
||||
viewsManagerSelectorButton: document.getElementById(
|
||||
"viewsManagerSelectorButton"
|
||||
),
|
||||
viewsManagerSelectorOptions: document.getElementById(
|
||||
"viewsManagerSelectorOptions"
|
||||
),
|
||||
thumbnailsView: document.getElementById("thumbnailsView"),
|
||||
outlinesView: document.getElementById("outlinesView"),
|
||||
attachmentsView: document.getElementById("attachmentsView"),
|
||||
layersView: document.getElementById("layersView"),
|
||||
viewsManagerAddFile: {
|
||||
button: document.getElementById("viewsManagerAddFileButton"),
|
||||
picker: document.getElementById("viewsManagerAddFilePicker"),
|
||||
},
|
||||
viewsManagerCurrentOutlineButton: document.getElementById(
|
||||
"viewsManagerCurrentOutlineButton"
|
||||
),
|
||||
viewsManagerHeaderLabel: document.getElementById(
|
||||
"viewsManagerHeaderLabel"
|
||||
),
|
||||
viewsManagerStatus: document.getElementById("viewsManagerStatus"),
|
||||
viewsManagerStatusBar: {
|
||||
viewsManagerStatusAction: document.getElementById(
|
||||
"viewsManagerStatusAction"
|
||||
),
|
||||
viewsManagerStatusActionDeselectButton: document.getElementById(
|
||||
"viewsManagerStatusActionDeselectButton"
|
||||
),
|
||||
viewsManagerStatusActionLabel: document.getElementById(
|
||||
"viewsManagerStatusActionLabel"
|
||||
),
|
||||
},
|
||||
viewsManagerUndoBar: {
|
||||
viewsManagerStatusUndo: document.getElementById(
|
||||
"viewsManagerStatusUndo"
|
||||
),
|
||||
viewsManagerStatusUndoLabel: document.getElementById(
|
||||
"viewsManagerStatusUndoLabel"
|
||||
),
|
||||
viewsManagerStatusUndoButton: document.getElementById(
|
||||
"viewsManagerStatusUndoButton"
|
||||
),
|
||||
viewsManagerStatusUndoCloseButton: document.getElementById(
|
||||
"viewsManagerStatusUndoCloseButton"
|
||||
),
|
||||
},
|
||||
viewsManagerWaitingBar: {
|
||||
container: document.getElementById("viewsManagerStatusWaiting"),
|
||||
closeButton: document.getElementById(
|
||||
"viewsManagerStatusWaitingCloseButton"
|
||||
),
|
||||
label: document.getElementById("viewsManagerStatusWaitingLabel"),
|
||||
},
|
||||
manageMenu: {
|
||||
button: document.getElementById("viewsManagerStatusActionButton"),
|
||||
menu: document.getElementById("viewsManagerStatusActionOptions"),
|
||||
copy: document.getElementById("viewsManagerStatusActionCopy"),
|
||||
cut: document.getElementById("viewsManagerStatusActionCut"),
|
||||
delete: document.getElementById("viewsManagerStatusActionDelete"),
|
||||
exportSelected: document.getElementById(
|
||||
"viewsManagerStatusActionExport"
|
||||
),
|
||||
},
|
||||
},
|
||||
findBar: {
|
||||
bar: document.getElementById("findbar"),
|
||||
toggleButton: document.getElementById("viewFindButton"),
|
||||
findField: document.getElementById("findInput"),
|
||||
highlightAllCheckbox: document.getElementById("findHighlightAll"),
|
||||
caseSensitiveCheckbox: document.getElementById("findMatchCase"),
|
||||
matchDiacriticsCheckbox: document.getElementById("findMatchDiacritics"),
|
||||
entireWordCheckbox: document.getElementById("findEntireWord"),
|
||||
findMsg: document.getElementById("findMsg"),
|
||||
findResultsCount: document.getElementById("findResultsCount"),
|
||||
findPreviousButton: document.getElementById("findPreviousButton"),
|
||||
findNextButton: document.getElementById("findNextButton"),
|
||||
},
|
||||
passwordOverlay: {
|
||||
dialog: document.getElementById("passwordDialog"),
|
||||
label: document.getElementById("passwordText"),
|
||||
input: document.getElementById("password"),
|
||||
submitButton: document.getElementById("passwordSubmit"),
|
||||
cancelButton: document.getElementById("passwordCancel"),
|
||||
},
|
||||
documentProperties: {
|
||||
dialog: document.getElementById("documentPropertiesDialog"),
|
||||
closeButton: document.getElementById("documentPropertiesClose"),
|
||||
fields: {
|
||||
fileName: document.getElementById("fileNameField"),
|
||||
fileSize: document.getElementById("fileSizeField"),
|
||||
title: document.getElementById("titleField"),
|
||||
author: document.getElementById("authorField"),
|
||||
subject: document.getElementById("subjectField"),
|
||||
keywords: document.getElementById("keywordsField"),
|
||||
creationDate: document.getElementById("creationDateField"),
|
||||
modificationDate: document.getElementById("modificationDateField"),
|
||||
creator: document.getElementById("creatorField"),
|
||||
producer: document.getElementById("producerField"),
|
||||
version: document.getElementById("versionField"),
|
||||
pageCount: document.getElementById("pageCountField"),
|
||||
pageSize: document.getElementById("pageSizeField"),
|
||||
linearized: document.getElementById("linearizedField"),
|
||||
},
|
||||
},
|
||||
altTextDialog: {
|
||||
dialog: document.getElementById("altTextDialog"),
|
||||
optionDescription: document.getElementById("descriptionButton"),
|
||||
optionDecorative: document.getElementById("decorativeButton"),
|
||||
textarea: document.getElementById("descriptionTextarea"),
|
||||
cancelButton: document.getElementById("altTextCancel"),
|
||||
saveButton: document.getElementById("altTextSave"),
|
||||
},
|
||||
newAltTextDialog: {
|
||||
dialog: document.getElementById("newAltTextDialog"),
|
||||
title: document.getElementById("newAltTextTitle"),
|
||||
descriptionContainer: document.getElementById(
|
||||
"newAltTextDescriptionContainer"
|
||||
),
|
||||
textarea: document.getElementById("newAltTextDescriptionTextarea"),
|
||||
disclaimer: document.getElementById("newAltTextDisclaimer"),
|
||||
learnMore: document.getElementById("newAltTextLearnMore"),
|
||||
imagePreview: document.getElementById("newAltTextImagePreview"),
|
||||
createAutomatically: document.getElementById(
|
||||
"newAltTextCreateAutomatically"
|
||||
),
|
||||
createAutomaticallyButton: document.getElementById(
|
||||
"newAltTextCreateAutomaticallyButton"
|
||||
),
|
||||
downloadModel: document.getElementById("newAltTextDownloadModel"),
|
||||
downloadModelDescription: document.getElementById(
|
||||
"newAltTextDownloadModelDescription"
|
||||
),
|
||||
error: document.getElementById("newAltTextError"),
|
||||
errorCloseButton: document.getElementById("newAltTextCloseButton"),
|
||||
cancelButton: document.getElementById("newAltTextCancel"),
|
||||
notNowButton: document.getElementById("newAltTextNotNow"),
|
||||
saveButton: document.getElementById("newAltTextSave"),
|
||||
},
|
||||
altTextSettingsDialog: {
|
||||
dialog: document.getElementById("altTextSettingsDialog"),
|
||||
createModelButton: document.getElementById("createModelButton"),
|
||||
learnMore: document.getElementById("altTextSettingsLearnMore"),
|
||||
showAltTextDialogButton: document.getElementById(
|
||||
"showAltTextDialogButton"
|
||||
),
|
||||
altTextSettingsCloseButton: document.getElementById(
|
||||
"altTextSettingsCloseButton"
|
||||
),
|
||||
closeButton: document.getElementById("altTextSettingsCloseButton"),
|
||||
},
|
||||
addSignatureDialog: {
|
||||
dialog: document.getElementById("addSignatureDialog"),
|
||||
panels: document.getElementById("addSignatureActionContainer"),
|
||||
typeButton: document.getElementById("addSignatureTypeButton"),
|
||||
typeInput: document.getElementById("addSignatureTypeInput"),
|
||||
drawButton: document.getElementById("addSignatureDrawButton"),
|
||||
drawSVG: document.getElementById("addSignatureDraw"),
|
||||
drawPlaceholder: document.getElementById("addSignatureDrawPlaceholder"),
|
||||
drawThickness: document.getElementById("addSignatureDrawThickness"),
|
||||
imageButton: document.getElementById("addSignatureImageButton"),
|
||||
imageSVG: document.getElementById("addSignatureImage"),
|
||||
imagePlaceholder: document.getElementById("addSignatureImagePlaceholder"),
|
||||
imagePicker: document.getElementById("addSignatureFilePicker"),
|
||||
imagePickerLink: document.getElementById("addSignatureImageBrowse"),
|
||||
description: document.getElementById("addSignatureDescription"),
|
||||
clearButton: document.getElementById("clearSignatureButton"),
|
||||
saveContainer: document.getElementById("addSignatureSaveContainer"),
|
||||
saveCheckbox: document.getElementById("addSignatureSaveCheckbox"),
|
||||
errorBar: document.getElementById("addSignatureError"),
|
||||
errorTitle: document.getElementById("addSignatureErrorTitle"),
|
||||
errorDescription: document.getElementById("addSignatureErrorDescription"),
|
||||
errorCloseButton: document.getElementById("addSignatureErrorCloseButton"),
|
||||
cancelButton: document.getElementById("addSignatureCancelButton"),
|
||||
addButton: document.getElementById("addSignatureAddButton"),
|
||||
},
|
||||
editSignatureDialog: {
|
||||
dialog: document.getElementById("editSignatureDescriptionDialog"),
|
||||
description: document.getElementById("editSignatureDescription"),
|
||||
editSignatureView: document.getElementById("editSignatureView"),
|
||||
cancelButton: document.getElementById("editSignatureCancelButton"),
|
||||
updateButton: document.getElementById("editSignatureUpdateButton"),
|
||||
},
|
||||
annotationEditorParams: {
|
||||
editorCommentsSidebar: document.getElementById("editorCommentsSidebar"),
|
||||
editorCommentsSidebarCount: document.getElementById(
|
||||
"editorCommentsSidebarCount"
|
||||
),
|
||||
editorCommentsSidebarTitle: document.getElementById(
|
||||
"editorCommentsSidebarTitle"
|
||||
),
|
||||
editorCommentsSidebarCloseButton: document.getElementById(
|
||||
"editorCommentsSidebarCloseButton"
|
||||
),
|
||||
editorCommentsSidebarList: document.getElementById(
|
||||
"editorCommentsSidebarList"
|
||||
),
|
||||
editorCommentsSidebarResizer: document.getElementById(
|
||||
"editorCommentsSidebarResizer"
|
||||
),
|
||||
editorFreeTextFontSize: document.getElementById("editorFreeTextFontSize"),
|
||||
editorFreeTextColor: document.getElementById("editorFreeTextColor"),
|
||||
editorInkColor: document.getElementById("editorInkColor"),
|
||||
editorInkThickness: document.getElementById("editorInkThickness"),
|
||||
editorInkOpacity: document.getElementById("editorInkOpacity"),
|
||||
editorStampAddImage: document.getElementById("editorStampAddImage"),
|
||||
editorSignatureAddSignature: document.getElementById(
|
||||
"editorSignatureAddSignature"
|
||||
),
|
||||
editorFreeHighlightThickness: document.getElementById(
|
||||
"editorFreeHighlightThickness"
|
||||
),
|
||||
editorHighlightShowAll: document.getElementById("editorHighlightShowAll"),
|
||||
},
|
||||
printContainer: document.getElementById("printContainer"),
|
||||
editorUndoBar: {
|
||||
container: document.getElementById("editorUndoBar"),
|
||||
message: document.getElementById("editorUndoBarMessage"),
|
||||
undoButton: document.getElementById("editorUndoBarUndoButton"),
|
||||
closeButton: document.getElementById("editorUndoBarCloseButton"),
|
||||
},
|
||||
editCommentDialog: {
|
||||
dialog: document.getElementById("commentManagerDialog"),
|
||||
toolbar: document.getElementById("commentManagerToolbar"),
|
||||
title: document.getElementById("commentManagerTitle"),
|
||||
textInput: document.getElementById("commentManagerTextInput"),
|
||||
cancelButton: document.getElementById("commentManagerCancelButton"),
|
||||
saveButton: document.getElementById("commentManagerSaveButton"),
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
function webViewerLoad() {
|
||||
const config = getViewerConfiguration();
|
||||
|
||||
if (typeof PDFJSDev !== "undefined" && PDFJSDev.test("GENERIC")) {
|
||||
// Give custom implementations of the default viewer a simpler way to
|
||||
// set various `AppOptions`, by dispatching an event once all viewer
|
||||
// files are loaded but *before* the viewer initialization has run.
|
||||
const event = new CustomEvent("webviewerloaded", {
|
||||
bubbles: true,
|
||||
cancelable: true,
|
||||
detail: {
|
||||
source: window,
|
||||
},
|
||||
});
|
||||
try {
|
||||
// Attempt to dispatch the event at the embedding `document`,
|
||||
// in order to support cases where the viewer is embedded in
|
||||
// a *dynamically* created <iframe> element.
|
||||
parent.document.dispatchEvent(event);
|
||||
} catch (ex) {
|
||||
// The viewer could be in e.g. a cross-origin <iframe> element,
|
||||
// fallback to dispatching the event at the current `document`.
|
||||
console.error("webviewerloaded:", ex);
|
||||
document.dispatchEvent(event);
|
||||
}
|
||||
}
|
||||
PDFViewerApplication.run(config);
|
||||
}
|
||||
|
||||
// Block the "load" event until all pages are loaded, to ensure that printing
|
||||
// works in Firefox; see https://bugzilla.mozilla.org/show_bug.cgi?id=1618553
|
||||
document.blockUnblockOnload?.(true);
|
||||
|
||||
if (
|
||||
document.readyState === "interactive" ||
|
||||
document.readyState === "complete"
|
||||
) {
|
||||
webViewerLoad();
|
||||
} else {
|
||||
document.addEventListener("DOMContentLoaded", webViewerLoad, true);
|
||||
}
|
||||
|
||||
export {
|
||||
PDFViewerApplication,
|
||||
AppConstants as PDFViewerApplicationConstants,
|
||||
AppOptions as PDFViewerApplicationOptions,
|
||||
};
|
||||
Reference in New Issue
Block a user