: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
window.addEventListener("wheel", webViewerWheel, {
window.addEventListener("touchstart", webViewerTouchStart, {
window.addEventListener("touchmove", webViewerTouchMove, {
window.addEventListener("touchend", webViewerTouchEnd, {
window.addEventListener("click", webViewerClick, {
window.addEventListener("keydown", webViewerKeyDown, {
window.addEventListener("keyup", webViewerKeyUp, {
window.addEventListener("resize", () => {
eventBus.dispatch("resize", {
window.addEventListener("hashchange", () => {
eventBus.dispatch("hashchange", {
hash: document.location.hash.substring(1)
window.addEventListener("beforeprint", () => {
eventBus.dispatch("beforeprint", {
window.addEventListener("afterprint", () => {
eventBus.dispatch("afterprint", {
window.addEventListener("updatefromsandbox", event => {
eventBus.dispatch("updatefromsandbox", {
if (!("onscrollend" in document.documentElement)) {
scrollTop: this._lastScrollTop,
scrollLeft: this._lastScrollLeft
const scrollend = () => {
scrollTop: this._lastScrollTop,
scrollLeft: this._lastScrollLeft
this._isScrolling = false;
mainContainer.addEventListener("scroll", scroll, {
mainContainer.removeEventListener("scrollend", scrollend);
mainContainer.removeEventListener("blur", scrollend);
if (this._isCtrlKeyDown) {
if (this._lastScrollTop === mainContainer.scrollTop && this._lastScrollLeft === mainContainer.scrollLeft) {
mainContainer.removeEventListener("scroll", scroll, {
this._isScrolling = true;
mainContainer.addEventListener("scrollend", scrollend, {
mainContainer.addEventListener("blur", scrollend, {
mainContainer.addEventListener("scroll", scroll, {
this._eventBusAbortController?.abort();
this._eventBusAbortController = null;
this._windowAbortController?.abort();
this._windowAbortController = null;
_accumulateTicks(ticks, prop) {
if (this[prop] > 0 && ticks < 0 || this[prop] < 0 && ticks > 0) {
const wholeTicks = Math.trunc(this[prop]);
this[prop] -= wholeTicks;
_accumulateFactor(previousScale, factor, prop) {
if (this[prop] > 1 && factor < 1 || this[prop] < 1 && factor > 1) {
const newFactor = Math.floor(previousScale * factor * this[prop] * 100) / (100 * previousScale);
this[prop] = factor / newFactor;
_unblockDocumentLoadEvent() {
document.blockUnblockOnload?.(false);
this._unblockDocumentLoadEvent = () => {};
return this.pdfScriptingManager.ready;
initCom(PDFViewerApplication);
PDFPrintServiceFactory.initGlobals(PDFViewerApplication);
const HOSTED_VIEWER_ORIGINS = ["null", "http://mozilla.github.io", "https://mozilla.github.io"];
var validateFileURL = function (file) {
const viewerOrigin = new URL(window.location.href).origin || "null";
if (HOSTED_VIEWER_ORIGINS.includes(viewerOrigin)) {
const fileOrigin = new URL(file, window.location.href).origin;
if (fileOrigin !== viewerOrigin) {
throw new Error("file origin does not match viewer's");
PDFViewerApplication._documentError("pdfjs-loading-error", {
function webViewerPageRender({
if (pageNumber === PDFViewerApplication.page) {
PDFViewerApplication.toolbar?.updateLoadingIndicatorState(true);
function webViewerPageRendered({
if (pageNumber === PDFViewerApplication.page) {
PDFViewerApplication.toolbar?.updateLoadingIndicatorState(false);
if (PDFViewerApplication.pdfSidebar?.visibleView === SidebarView.THUMBS) {
const pageView = PDFViewerApplication.pdfViewer.getPageView(pageNumber - 1);
const thumbnailView = PDFViewerApplication.pdfThumbnailViewer?.getThumbnail(pageNumber - 1);
thumbnailView?.setImage(pageView);
PDFViewerApplication._otherError("pdfjs-rendering-error", error);
function webViewerPageMode({
view = SidebarView.THUMBS;
view = SidebarView.OUTLINE;
view = SidebarView.ATTACHMENTS;
view = SidebarView.LAYERS;
console.error('Invalid "pagemode" hash parameter: ' + mode);
PDFViewerApplication.pdfSidebar?.switchView(view, true);
function webViewerNamedAction(evt) {
PDFViewerApplication.appConfig.toolbar?.pageNumber.select();
if (!PDFViewerApplication.supportsIntegratedFind) {
PDFViewerApplication.findBar?.toggle();
PDFViewerApplication.triggerPrinting();
PDFViewerApplication.downloadOrSave();
function webViewerPresentationModeChanged(evt) {
PDFViewerApplication.pdfViewer.presentationModeState = evt.state;
function webViewerSidebarViewChanged({
PDFViewerApplication.pdfRenderingQueue.isThumbnailViewEnabled = view === SidebarView.THUMBS;
if (PDFViewerApplication.isInitialViewSet) {
PDFViewerApplication.store?.set("sidebarView", view).catch(() => {});
function webViewerUpdateViewarea({
if (PDFViewerApplication.isInitialViewSet) {
PDFViewerApplication.store?.setMultiple({
page: location.pageNumber,
scrollLeft: location.left,
rotation: location.rotation
if (PDFViewerApplication.appConfig.secondaryToolbar) {
const href = PDFViewerApplication.pdfLinkService.getAnchorUrl(location.pdfOpenParams);
PDFViewerApplication.appConfig.secondaryToolbar.viewBookmarkButton.href = href;
function webViewerScrollModeChanged(evt) {
if (PDFViewerApplication.isInitialViewSet && !PDFViewerApplication.pdfViewer.isInPresentationMode) {
PDFViewerApplication.store?.set("scrollMode", evt.mode).catch(() => {});
function webViewerSpreadModeChanged(evt) {
if (PDFViewerApplication.isInitialViewSet && !PDFViewerApplication.pdfViewer.isInPresentationMode) {
PDFViewerApplication.store?.set("spreadMode", evt.mode).catch(() => {});
function webViewerResize() {
} = PDFViewerApplication;
if (pdfRenderingQueue.printing && window.matchMedia("print").matches) {
const currentScaleValue = pdfViewer.currentScaleValue;
if (currentScaleValue === "auto" || currentScaleValue === "page-fit" || currentScaleValue === "page-width") {
pdfViewer.currentScaleValue = currentScaleValue;
function webViewerHashchange(evt) {
if (!PDFViewerApplication.isInitialViewSet) {
PDFViewerApplication.initialBookmark = hash;
} else if (!PDFViewerApplication.pdfHistory?.popStateInProgress) {
PDFViewerApplication.pdfLinkService.setHash(hash);
var webViewerFileInputChange = function (evt) {
if (PDFViewerApplication.pdfViewer?.isInPresentationMode) {
const file = evt.fileInput.files[0];
PDFViewerApplication.open({
url: URL.createObjectURL(file),
var webViewerOpenFile = function (evt) {
PDFViewerApplication._openFileInput?.click();
function webViewerPresentationMode() {
PDFViewerApplication.requestPresentationMode();
function webViewerSwitchAnnotationEditorMode(evt) {
PDFViewerApplication.pdfViewer.annotationEditorMode = evt;
function webViewerSwitchAnnotationEditorParams(evt) {
PDFViewerApplication.pdfViewer.annotationEditorParams = evt;
function webViewerPrint() {
PDFViewerApplication.triggerPrinting();
function webViewerDownload() {
PDFViewerApplication.downloadOrSave();
function webViewerFirstPage() {
PDFViewerApplication.page = 1;
function webViewerLastPage() {
PDFViewerApplication.page = PDFViewerApplication.pagesCount;
function webViewerNextPage() {
PDFViewerApplication.pdfViewer.nextPage();
function webViewerPreviousPage() {
PDFViewerApplication.pdfViewer.previousPage();
function webViewerZoomIn() {
PDFViewerApplication.zoomIn();
function webViewerZoomOut() {
PDFViewerApplication.zoomOut();
function webViewerZoomReset() {
PDFViewerApplication.zoomReset();
function webViewerPageNumberChanged(evt) {
const pdfViewer = PDFViewerApplication.pdfViewer;
PDFViewerApplication.pdfLinkService.goToPage(evt.value);
if (evt.value !== pdfViewer.currentPageNumber.toString() && evt.value !== pdfViewer.currentPageLabel) {
PDFViewerApplication.toolbar?.setPageNumber(pdfViewer.currentPageNumber, pdfViewer.currentPageLabel);
function webViewerScaleChanged(evt) {
PDFViewerApplication.pdfViewer.currentScaleValue = evt.value;
function webViewerRotateCw() {
PDFViewerApplication.rotatePages(90);
function webViewerRotateCcw() {
PDFViewerApplication.rotatePages(-90);
function webViewerOptionalContentConfig(evt) {
PDFViewerApplication.pdfViewer.optionalContentConfigPromise = evt.promise;
function webViewerSwitchScrollMode(evt) {
PDFViewerApplication.pdfViewer.scrollMode = evt.mode;
function webViewerSwitchSpreadMode(evt) {
PDFViewerApplication.pdfViewer.spreadMode = evt.mode;
function webViewerDocumentProperties() {
PDFViewerApplication.pdfDocumentProperties?.open();
function webViewerFindFromUrlHash(evt) {
PDFViewerApplication.eventBus.dispatch("find", {
function webViewerUpdateFindMatchesCount({
if (PDFViewerApplication.supportsIntegratedFind) {
PDFViewerApplication.externalServices.updateFindMatchesCount(matchesCount);
PDFViewerApplication.findBar?.updateResultsCount(matchesCount);
function webViewerUpdateFindControlState({
if (PDFViewerApplication.supportsIntegratedFind) {
PDFViewerApplication.externalServices.updateFindControlState({
PDFViewerApplication.findBar?.updateUIState(state, previous, matchesCount);
function webViewerScaleChanging(evt) {
PDFViewerApplication.toolbar?.setPageScale(evt.presetValue, evt.scale);
PDFViewerApplication.pdfViewer.update();
function webViewerRotationChanging(evt) {
if (PDFViewerApplication.pdfThumbnailViewer) {
PDFViewerApplication.pdfThumbnailViewer.pagesRotation = evt.pagesRotation;
PDFViewerApplication.forceRendering();
PDFViewerApplication.pdfViewer.currentPageNumber = evt.pageNumber;
function webViewerPageChanging({
PDFViewerApplication.toolbar?.setPageNumber(pageNumber, pageLabel);
PDFViewerApplication.secondaryToolbar?.setPageNumber(pageNumber);
if (PDFViewerApplication.pdfSidebar?.visibleView === SidebarView.THUMBS) {
PDFViewerApplication.pdfThumbnailViewer?.scrollThumbnailIntoView(pageNumber);
const currentPage = PDFViewerApplication.pdfViewer.getPageView(pageNumber - 1);
PDFViewerApplication.toolbar?.updateLoadingIndicatorState(currentPage?.renderingState === RenderingStates.RUNNING);
function webViewerResolutionChange(evt) {
PDFViewerApplication.pdfViewer.refresh();
function webViewerVisibilityChange(evt) {
if (document.visibilityState === "visible") {
setZoomDisabledTimeout();
let zoomDisabledTimeout = null;
function setZoomDisabledTimeout() {
if (zoomDisabledTimeout) {
clearTimeout(zoomDisabledTimeout);
zoomDisabledTimeout = setTimeout(function () {
zoomDisabledTimeout = null;
}, WHEEL_ZOOM_DISABLED_TIMEOUT);
function webViewerWheel(evt) {
supportsMouseWheelZoomCtrlKey,
supportsMouseWheelZoomMetaKey,
} = PDFViewerApplication;
if (pdfViewer.isInPresentationMode) {
const deltaMode = evt.deltaMode;
let scaleFactor = Math.exp(-evt.deltaY / 100);
const isBuiltInMac = false;
const isPinchToZoom = evt.ctrlKey && !PDFViewerApplication._isCtrlKeyDown && deltaMode === WheelEvent.DOM_DELTA_PIXEL && evt.deltaX === 0 && (Math.abs(scaleFactor - 1) < 0.05 || isBuiltInMac) && evt.deltaZ === 0;
const origin = [evt.clientX, evt.clientY];
if (isPinchToZoom || evt.ctrlKey && supportsMouseWheelZoomCtrlKey || evt.metaKey && supportsMouseWheelZoomMetaKey) {
if (PDFViewerApplication._isScrolling || zoomDisabledTimeout || document.visibilityState === "hidden" || PDFViewerApplication.overlayManager.active) {
if (isPinchToZoom && supportsPinchToZoom) {
scaleFactor = PDFViewerApplication._accumulateFactor(pdfViewer.currentScale, scaleFactor, "_wheelUnusedFactor");
PDFViewerApplication.updateZoom(null, scaleFactor, origin);
const delta = normalizeWheelEventDirection(evt);
if (deltaMode === WheelEvent.DOM_DELTA_LINE || deltaMode === WheelEvent.DOM_DELTA_PAGE) {
if (Math.abs(delta) >= 1) {
ticks = Math.sign(delta);
ticks = PDFViewerApplication._accumulateTicks(delta, "_wheelUnusedTicks");
const PIXELS_PER_LINE_SCALE = 30;
ticks = PDFViewerApplication._accumulateTicks(delta / PIXELS_PER_LINE_SCALE, "_wheelUnusedTicks");