first commit
	
		
			
	
		
	
	
		
	
		
			Some checks failed
		
		
	
	
		
			
				
	
				Types tests / Test (lts/*) (push) Has been cancelled
				
			
		
			
				
	
				Lint / Lint (lts/*) (push) Has been cancelled
				
			
		
			
				
	
				CodeQL / Analyze (javascript) (push) Has been cancelled
				
			
		
			
				
	
				CI / Test (20) (push) Has been cancelled
				
			
		
			
				
	
				CI / Test (22) (push) Has been cancelled
				
			
		
			
				
	
				CI / Test (24) (push) Has been cancelled
				
			
		
		
	
	
				
					
				
			
		
			Some checks failed
		
		
	
	Types tests / Test (lts/*) (push) Has been cancelled
				
			Lint / Lint (lts/*) (push) Has been cancelled
				
			CodeQL / Analyze (javascript) (push) Has been cancelled
				
			CI / Test (20) (push) Has been cancelled
				
			CI / Test (22) (push) Has been cancelled
				
			CI / Test (24) (push) Has been cancelled
				
			This commit is contained in:
		
							
								
								
									
										342
									
								
								web/viewer.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										342
									
								
								web/viewer.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,342 @@
 | 
			
		||||
/* 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 { RenderingStates, ScrollMode, SpreadMode } from "./ui_utils.js";
 | 
			
		||||
import { AppOptions } from "./app_options.js";
 | 
			
		||||
import { LinkTarget } from "./pdf_link_service.js";
 | 
			
		||||
import { PDFViewerApplication } from "./app.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"),
 | 
			
		||||
    },
 | 
			
		||||
    sidebar: {
 | 
			
		||||
      // Divs (and sidebar button)
 | 
			
		||||
      outerContainer: document.getElementById("outerContainer"),
 | 
			
		||||
      sidebarContainer: document.getElementById("sidebarContainer"),
 | 
			
		||||
      toggleButton: document.getElementById("sidebarToggleButton"),
 | 
			
		||||
      resizer: document.getElementById("sidebarResizer"),
 | 
			
		||||
      // Buttons
 | 
			
		||||
      thumbnailButton: document.getElementById("viewThumbnail"),
 | 
			
		||||
      outlineButton: document.getElementById("viewOutline"),
 | 
			
		||||
      attachmentsButton: document.getElementById("viewAttachments"),
 | 
			
		||||
      layersButton: document.getElementById("viewLayers"),
 | 
			
		||||
      // Views
 | 
			
		||||
      thumbnailView: document.getElementById("thumbnailView"),
 | 
			
		||||
      outlineView: document.getElementById("outlineView"),
 | 
			
		||||
      attachmentsView: document.getElementById("attachmentsView"),
 | 
			
		||||
      layersView: document.getElementById("layersView"),
 | 
			
		||||
      // View-specific options
 | 
			
		||||
      currentOutlineItemButton: document.getElementById("currentOutlineItem"),
 | 
			
		||||
    },
 | 
			
		||||
    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"),
 | 
			
		||||
      aiModelSettings: document.getElementById("aiModelSettings"),
 | 
			
		||||
      learnMore: document.getElementById("altTextSettingsLearnMore"),
 | 
			
		||||
      deleteModelButton: document.getElementById("deleteModelButton"),
 | 
			
		||||
      downloadModelButton: document.getElementById("downloadModelButton"),
 | 
			
		||||
      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