UNPKG

ngx-extended-pdf-viewer

Version:

Embedding PDF files in your Angular application. Highly configurable viewer including the toolbar, sidebar, and all the features you're used to.

1,392 lines (1,386 loc) 260 kB
import * as deburr from 'lodash.deburr'; import { Component, ViewEncapsulation, Input, Output, EventEmitter, ViewChild, ChangeDetectionStrategy, HostListener, NgZone, Injectable, NgModule, defineInjectable } from '@angular/core'; import { CommonModule } from '@angular/common'; /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** @type {?} */ var _isIE11 = !!((/** @type {?} */ (window))).MSInputMethodContext && !!((/** @type {?} */ (document))).documentMode; /** @type {?} */ var defaultOptions = { cursorToolOnLoad: 0, defaultUrl: '', defaultZoomValue: '', disableHistory: false, disablePageLabels: false, enablePrintAutoRotate: false, enableWebGL: false, eventBusDispatchToDOM: false, externalLinkRel: 'noopener noreferrer nofollow', externalLinkTarget: 0, historyUpdateUrl: false, imageResourcesPath: './images/', maxCanvasPixels: 16777216, pdfBugEnabled: false, renderer: 'canvas', renderInteractiveForms: false, sidebarViewOnLoad: -1, scrollModeOnLoad: -1, spreadModeOnLoad: -1, textLayerMode: 1, useOnlyCssZoom: false, viewOnLoad: 0, cMapPacked: true, cMapUrl: '../web/cmaps/', disableAutoFetch: false, disableCreateObjectURL: false, disableFontFace: false, disableRange: false, disableStream: false, isEvalSupported: true, maxImageSize: -1, pdfBug: false, postMessageTransfers: true, verbosity: 1, workerPort: null, workerSrc: _isIE11 ? './assets/pdf.worker-es5.js' : './assets/pdf.worker.js' }; /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** * @param {?} width * @return {?} */ function resizeUpTo535px(width) { /** @type {?} */ var tinyElement = document.getElementById('scaleSelectContainer'); /** @type {?} */ var tiny = (/** @type {?} */ (tinyElement)); if (width < 535) { // not perfect, but good first approximation tiny.classList.add('hidden'); } else { tiny.classList.remove('hidden'); } } /** * @param {?} container * @param {?} width * @return {?} */ function resizeUpTo640px(container, width) { /** @type {?} */ var smallElements = container.getElementsByClassName('hiddenSmallView'); for (var i = 0; i < smallElements.length; i++) { /** @type {?} */ var elt = (/** @type {?} */ (smallElements[i])); if (width < 640) { elt.classList.add('hidden'); } else { elt.classList.remove('hidden'); } } /** @type {?} */ var visibleSmallViewElements = container.getElementsByClassName('visibleSmallView'); for (var i = 0; i < visibleSmallViewElements.length; i++) { /** @type {?} */ var elt = (/** @type {?} */ (visibleSmallViewElements[i])); if (width < 640) { elt.classList.remove('hidden'); } else { elt.classList.add('hidden'); } } /** @type {?} */ var toolbarButtonSpacer = container.getElementsByClassName('toolbarButtonSpacer'); for (var i = 0; i < toolbarButtonSpacer.length; i++) { /** @type {?} */ var elt = (/** @type {?} */ (toolbarButtonSpacer[i])); if (width < 640) { elt.classList.add('below640px'); } else { elt.classList.remove('below640px'); } } /** @type {?} */ var findbar = document.getElementsByClassName('findbar'); for (var i = 0; i < findbar.length; i++) { /** @type {?} */ var elt = (/** @type {?} */ (findbar[i])); if (width < 640) { elt.classList.add('below640px'); } else { elt.classList.remove('below640px'); } } } /** * @param {?} container * @param {?} width * @return {?} */ function resizeUpTo700px(container, width) { /** @type {?} */ var mediumElements = container.getElementsByClassName('hiddenMediumView'); for (var i = 0; i < mediumElements.length; i++) { /** @type {?} */ var elt = (/** @type {?} */ (mediumElements[i])); if (width < 700) { elt.classList.add('hidden'); } else { elt.classList.remove('hidden'); } } // #103 /** @type {?} */ var visibleMediumElements = container.getElementsByClassName('visibleMediumView'); for (var i = 0; i < visibleMediumElements.length; i++) { /** @type {?} */ var elt = (/** @type {?} */ (visibleMediumElements[i])); if (width < 700) { elt.classList.remove('hidden'); } else { elt.classList.add('hidden'); } } } /** * @param {?} width * @return {?} */ function resizeUpTo900px(width) { /** @type {?} */ var elt = document.getElementById('toolbarViewerMiddle'); if (elt) { if (width < 900) { elt.classList.add('toolbarViewerMiddleBelow900px'); } else { elt.classList.remove('toolbarViewerMiddleBelow900px'); } } } /** * @param {?} width * @return {?} */ function resizeUpTo840px(width) { /** @type {?} */ var elt = document.getElementsByClassName('zoom')[0]; if (elt) { if (width < 840) { elt.classList.add('below840px'); } else { elt.classList.remove('below840px'); } } } /** * @param {?} container * @param {?} width * @return {?} */ function resizeUpTo770px(container, width) { /** @type {?} */ var elt = document.getElementsByClassName('zoom')[0]; if (elt) { if (width < 770) { elt.classList.add('below770px'); } else { elt.classList.remove('below770px'); } } /** @type {?} */ var hiddenLargeElements = container.getElementsByClassName('hiddenLargeView'); for (var i = 0; i < hiddenLargeElements.length; i++) { elt = (/** @type {?} */ (hiddenLargeElements[i])); if (width < 770) { elt.classList.add('hidden'); } else { elt.classList.remove('hidden'); } } /** @type {?} */ var visibleLargeElements = container.getElementsByClassName('visibleLargeView'); for (var i = 0; i < visibleLargeElements.length; i++) { elt = (/** @type {?} */ (visibleLargeElements[i])); if (width < 770) { elt.classList.remove('hidden'); } else { elt.classList.add('hidden'); } } } /** * @return {?} */ function removeDynamicCSS() { /** @type {?} */ var classesToRemove = ['toolbarViewerMiddleBelow900px', 'below840px', 'below770px', 'below700px', 'below640px']; /** @type {?} */ var elt = document.getElementsByClassName('zoom')[0]; if (elt) { classesToRemove.forEach((/** * @param {?} c * @return {?} */ function (c) { /** @type {?} */ var parents = elt.getElementsByClassName(c); if (parents) { for (var i = 0; i < parents.length; i++) { /** @type {?} */ var element = parents.item(i); if (element) { element.classList.remove(c); } } } })); /** @type {?} */ var tinyElement = document.getElementById('scaleSelectContainer'); if (tinyElement) { tinyElement.classList.remove('hidden'); } /** @type {?} */ var classesToRemoveHiddenFrom = [ 'hiddenSmallView', 'visibleSmallView', 'hiddenMediumView', 'visibleMediumView', 'hiddenLargeView', 'visibleLargeView' ]; classesToRemoveHiddenFrom.forEach((/** * @param {?} c * @return {?} */ function (c) { /** @type {?} */ var parents = elt.getElementsByClassName(c); if (parents) { for (var i = 0; i < parents.length; i++) { /** @type {?} */ var element = parents.item(i); if (element) { element.classList.remove('hidden'); } } } })); } } /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** @type {?} */ var ServiceWorkerOptions = { showUnverifiedSignatures: false }; ((/** @type {?} */ (window))).ServiceWorkerOptions = ServiceWorkerOptions; /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** @enum {number} */ var VerbosityLevel = { ERRORS: 0, WARNINGS: 1, INFOS: 5, }; VerbosityLevel[VerbosityLevel.ERRORS] = 'ERRORS'; VerbosityLevel[VerbosityLevel.WARNINGS] = 'WARNINGS'; VerbosityLevel[VerbosityLevel.INFOS] = 'INFOS'; /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** @enum {number} */ var FindState = { FOUND: 0, NOT_FOUND: 1, WRAPPED: 2, PENDING: 3, }; FindState[FindState.FOUND] = 'FOUND'; FindState[FindState.NOT_FOUND] = 'NOT_FOUND'; FindState[FindState.WRAPPED] = 'WRAPPED'; FindState[FindState.PENDING] = 'PENDING'; /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ ((/** @type {?} */ (window))).deburr = deburr; // #177 // #177 var NgxExtendedPdfViewerComponent = /** @class */ (function () { function NgxExtendedPdfViewerComponent(ngZone) { this.ngZone = ngZone; this.srcChange = new EventEmitter(); this.resizeTimeout = null; this.contextMenuAllowed = true; this.afterPrint = new EventEmitter(); this.beforePrint = new EventEmitter(); this.currentZoomFactor = new EventEmitter(); /** * Number of milliseconds to wait between initializing the PDF viewer and loading the PDF file. * Most users can let this parameter safely at it's default value of zero. * Set this to 1000 or higher if you run into timing problems (typically caused by loading the locale files * after the PDF files, so they are not available when the PDF viewer is initialized). */ this.delayFirstView = 0; this.ignoreResponsiveCSS = undefined; /** * How many log messages should be printed? * Legal values: VerbosityLevel.INFOS (= 5), VerbosityLevel.WARNINGS (= 1), VerbosityLevel.ERRORS (= 0) */ this.logLevel = VerbosityLevel.WARNINGS; this.primaryMenuVisible = true; /** * option to increase (or reduce) print resolution. Default is 150 (dpi). Sensible values * are 300, 600, and 1200. Note the increase memory consumption, which may even result in a browser crash. */ this.printResolution = null; this.rotationChange = new EventEmitter(); this.minHeight = undefined; this._height = '100%'; /** * If this flag is true, this components adds a link to the locale assets. The pdf viewer * sees this link and uses it to load the locale files automatically. * @param useBrowserLocale boolean */ this.useBrowserLocale = false; this.backgroundColor = '#e8e8eb'; /** * Allows the user to define the name of the file after clicking "download" */ this.filenameForDownload = 'document.pdf'; /** * Allows the user to disable the keyboard bindings completely */ this.ignoreKeyboard = false; /** * Allows the user to disable a list of key bindings. */ this.ignoreKeys = []; /** * Allows the user to explicitely enable a list of key bindings. If this property is set, every other key binding is ignored. */ this.acceptKeys = []; /** * Allows the user to put the viewer's svg images into an arbitrary folder */ this.imageResourcesPath = './assets/images/'; /** * Override the default locale. This must be the complete locale name, such as "es-ES". The string is allowed to be all lowercase. */ this.language = undefined; /** * By default, listening to the URL is deactivated because often the anchor tag is used for the Angular router */ this.listenToURL = false; /** * Navigate to a certain "named destination" */ this.nameddest = undefined; /** * allows you to pass a password to read password-protected files */ this.password = undefined; this._showSidebarButton = true; this.viewerPositionTop = '32px'; /** * pdf.js can show signatures, but fails to verify them. So they are switched off by default. * Set "[showUnverifiedSignatures]"="true" to display e-signatures nonetheless. */ this.showUnverifiedSignatures = false; /** * If [showSideBarButton]="true", do you want the sidebar to be shown by default ([showSidebarOnLoad])="true") * or not? By default, this flag is undefined, telling the PDF viewer to use the last setting used with this particular * document, or to hide the sidebar if the document is opened for the first time. * @deprecated Use showSidebar instead; dreprecated since 1.8.0; to be removed with 2.0.0 */ this.showSidebarOnLoad = undefined; this.sidebarVisible = undefined; this.sidebarVisibleChange = new EventEmitter(); this.showFindButton = undefined; this.showPagingButtons = true; this.showZoomButtons = true; this.showPresentationModeButton = false; this.showOpenFileButton = true; this.showPrintButton = true; this.showDownloadButton = true; this.showBookmarkButton = true; this.showSecondaryToolbarButton = true; this.showRotateButton = true; this.handTool = true; this.handToolChange = new EventEmitter(); this.showHandToolButton = false; this.showScrollingButton = true; this.showSpreadButton = true; this.showPropertiesButton = true; this.spreadChange = new EventEmitter(); this.page = undefined; this.pageChange = new EventEmitter(); this.pageLabel = undefined; this.pageLabelChange = new EventEmitter(); this.pagesLoaded = new EventEmitter(); this.pageRendered = new EventEmitter(); this.pdfDownloaded = new EventEmitter(); this.pdfLoaded = new EventEmitter(); this.pdfLoadingFailed = new EventEmitter(); this.textLayer = undefined; this.updateFindMatchesCount = new EventEmitter(); this.updateFindState = new EventEmitter(); /** * Legal values: undefined, 'auto', 'page-actual', 'page_fit', 'page-width', or '50' (or any other percentage) */ this.zoom = undefined; this.zoomChange = new EventEmitter(); /** * This attributes allows you to increase the size of the UI elements so you can use them on small mobile devices. * This attribute is a string with a percent character at the end (e.g. "150%"). */ this._mobileFriendlyZoom = '100%'; this.mobileFriendlyZoomScale = 1; this.toolbarWidth = '100%'; this.secondaryToolbarTop = undefined; // dirty IE11 hack - temporary solution this.findbarTop = undefined; // dirty IE11 hack - temporary solution this.findbarLeft = undefined; this._top = undefined; } Object.defineProperty(NgxExtendedPdfViewerComponent.prototype, "src", { set: /** * @param {?} url * @return {?} */ function (url) { if (url instanceof Uint8Array) { this._src = url.buffer; } else if (url instanceof Blob) { this._src = URL.createObjectURL(url); } else if (typeof url === 'string') { this._src = url; if (url.length > 980) { // minimal length of a base64 encoded PDF if (url.length % 4 === 0) { if (/^[a-zA-Z\d\/+]+={0,2}$/.test(url)) { console.error('The URL looks like a base64 encoded string. If so, please use the attribute base64 instead of src'); } } } } else { this._src = url; } }, enumerable: true, configurable: true }); Object.defineProperty(NgxExtendedPdfViewerComponent.prototype, "base64Src", { set: /** * @param {?} base64 * @return {?} */ function (base64) { /** @type {?} */ var binary_string = window.atob(base64); /** @type {?} */ var len = binary_string.length; /** @type {?} */ var bytes = new Uint8Array(len); for (var i = 0; i < len; i++) { bytes[i] = binary_string.charCodeAt(i); } this.src = bytes.buffer; }, enumerable: true, configurable: true }); Object.defineProperty(NgxExtendedPdfViewerComponent.prototype, "height", { get: /** * @return {?} */ function () { return this._height; }, set: /** * @param {?} h * @return {?} */ function (h) { var _this = this; this.minHeight = undefined; if (h) { this._height = h; } else { this.height = '100%'; } setTimeout((/** * @return {?} */ function () { _this.checkHeight(); })); }, enumerable: true, configurable: true }); Object.defineProperty(NgxExtendedPdfViewerComponent.prototype, "showSidebarButton", { get: /** * @return {?} */ function () { return this._showSidebarButton; }, set: /** * @param {?} show * @return {?} */ function (show) { this._showSidebarButton = show; /** @type {?} */ var isIE = /msie\s|trident\//i.test(window.navigator.userAgent); /** @type {?} */ var factor = 1; if (isIE) { factor = Number((this._mobileFriendlyZoom || '100').replace('%', '')) / 100; } if (this._showSidebarButton) { this.findbarLeft = (68 * factor).toString() + 'px'; } else { this.findbarLeft = '0px'; } }, enumerable: true, configurable: true }); Object.defineProperty(NgxExtendedPdfViewerComponent.prototype, "mobileFriendlyZoom", { get: /** * @return {?} */ function () { return this._mobileFriendlyZoom; }, /** * This attributes allows you to increase the size of the UI elements so you can use them on small mobile devices. * This attribute is a string with a percent character at the end (e.g. "150%"). */ set: /** * This attributes allows you to increase the size of the UI elements so you can use them on small mobile devices. * This attribute is a string with a percent character at the end (e.g. "150%"). * @param {?} zoom * @return {?} */ function (zoom) { // tslint:disable-next-line:triple-equals - the type conversion is intended if (zoom == 'true') { zoom = '150%'; // tslint:disable-next-line:triple-equals - the type conversion is intended } else if (zoom == 'false') { zoom = '100%'; } this._mobileFriendlyZoom = zoom; /** @type {?} */ var factor = 1; if (!String(zoom).includes('%')) { zoom = 100 * Number(zoom) + '%'; } factor = Number((zoom || '100').replace('%', '')) / 100; this.mobileFriendlyZoomScale = factor; this.toolbarWidth = (100 / factor).toString() + '%'; if (this.showSidebarButton) { this.findbarLeft = (68 * factor).toString() + 'px'; } else { this.findbarLeft = '0px'; } this.secondaryToolbarTop = (12 + 24 * factor).toString() + 'px'; this.findbarTop = (-6 + 42 * factor).toString() + 'px'; }, enumerable: true, configurable: true }); Object.defineProperty(NgxExtendedPdfViewerComponent.prototype, "mobileZoom", { /** Deprecated. Please use [mobileFriendlyZoom] instead. * This attributes allows you to increase the size of the UI elements so you can use them on small mobile devices. * This attribute is a string with a percent character at the end (e.g. "150%").*/ set: /** * Deprecated. Please use [mobileFriendlyZoom] instead. * This attributes allows you to increase the size of the UI elements so you can use them on small mobile devices. * This attribute is a string with a percent character at the end (e.g. "150%"). * @param {?} mobileFriendlyZoom * @return {?} */ function (mobileFriendlyZoom) { this.mobileFriendlyZoom = mobileFriendlyZoom; }, enumerable: true, configurable: true }); Object.defineProperty(NgxExtendedPdfViewerComponent.prototype, "sidebarPositionTop", { get: /** * @return {?} */ function () { if (this._top) { return this._top; } if (this.mobileFriendlyZoom) { if (this.mobileFriendlyZoom.endsWith('%')) { /** @type {?} */ var zoom = Number(this.mobileFriendlyZoom.substring(0, this.mobileFriendlyZoom.length - 1)); return (16 + 0.16 * zoom).toString() + 'px'; } if (this.mobileFriendlyZoom.endsWith('px')) { return this.mobileFriendlyZoom; } return (16 + 0.16 * Number(this.mobileFriendlyZoom)).toString() + 'px'; } return '32px'; }, enumerable: true, configurable: true }); /** * @return {?} */ NgxExtendedPdfViewerComponent.prototype.calcViewerPositionTop = /** * @return {?} */ function () { if (this._top) { this.viewerPositionTop = this._top; return; } if (this.mobileFriendlyZoom) { if (this.mobileFriendlyZoom.endsWith('%')) { /** @type {?} */ var zoom = Number(this.mobileFriendlyZoom.substring(0, this.mobileFriendlyZoom.length - 1)); if (!this.isPrimaryMenuVisible()) { this.viewerPositionTop = '0'; } else { this.viewerPositionTop = (1 + 0.32 * zoom).toString() + 'px'; } return; } if (this.mobileFriendlyZoom.endsWith('px')) { this.viewerPositionTop = this.mobileFriendlyZoom; return; } } if (this.isPrimaryMenuVisible()) { this.viewerPositionTop = '32px'; } else { this.viewerPositionTop = '0'; } }; /** * @return {?} */ NgxExtendedPdfViewerComponent.prototype.emitZoomChange = /** * @return {?} */ function () { /** @type {?} */ var selectedIndex = this.sizeSelector.nativeElement.selectedIndex; if (selectedIndex || selectedIndex === 0) { /** @type {?} */ var s = (/** @type {?} */ (this.sizeSelector.nativeElement.options[selectedIndex])); /** @type {?} */ var value = s.label; if (value.endsWith('%')) { value = Number(value.replace('%', '')); } else { value = s.value; } this.zoomChange.emit(value); } }; /** * @return {?} */ NgxExtendedPdfViewerComponent.prototype.ngOnInit = /** * @return {?} */ function () { var _this = this; if (this.ignoreResponsiveCSS === undefined) { /** @type {?} */ var pdfViewer = document.getElementsByClassName('html'); if (pdfViewer && pdfViewer.length > 0) { /** @type {?} */ var toolbar_1 = pdfViewer[0].getElementsByClassName('toolbar'); if (toolbar_1 && toolbar_1.length > 0) { /** @type {?} */ var width = toolbar_1[0].clientWidth; if (window.innerWidth - width > 50) { this.ignoreResponsiveCSS = true; } else { this.ignoreResponsiveCSS = false; } } } } /** @type {?} */ var langLinks = document.querySelectorAll('link[type="application/l10n"]'); /** @type {?} */ var langCount = langLinks.length; if (langCount === 0) { /** @type {?} */ var dict = document.querySelector('script[type="application/l10n"]'); if (!dict) { if (!this.useBrowserLocale) { console.error( // tslint:disable-next-line:quotemark "If you set the attribute 'useBrowserLocale' to false, you must provide the translations yourself in a script or link tag."); console.error('The easiest way to do this is to add them to the index.html.'); } } else if (this.useBrowserLocale) { console.error( // tslint:disable-next-line:quotemark "Please set the attribute 'useBrowserLocale' to false if you provide the translations yourself in a script or link tag."); } } else if (this.useBrowserLocale) { /** @type {?} */ var o = langLinks[0].attributes['origin']; if (o && o.value !== 'ngx-extended-pdf-viewer') { console.error( // tslint:disable-next-line:quotemark "Please set the attribute 'useBrowserLocale' to false if you provide the translations yourself in a script or link tag."); } } /** @type {?} */ var callback = (/** * @param {?} e * @return {?} */ function (e) { document.removeEventListener('localized', callback); _this.initTimeout = setTimeout((/** * @return {?} */ function () { _this.openPDF(); }), _this.delayFirstView); }); window.addEventListener('afterprint', (/** * @param {?} event * @return {?} */ function (event) { _this.afterPrint.emit(); })); window.addEventListener('beforeprint', (/** * @param {?} event * @return {?} */ function (event) { _this.beforePrint.emit(); })); document.addEventListener('localized', callback); if (NgxExtendedPdfViewerComponent.ngxExtendedPdfViewerInitialized) { // tslint:disable-next-line:quotemark console.error("You're trying to open two instances of the PDF viewer. Most likely, this will result in errors."); } /** @type {?} */ var onLoaded = (/** * @return {?} */ function () { _this.overrideDefaultSettings(); document.removeEventListener('webviewerloaded', onLoaded); }); document.addEventListener('webviewerloaded', onLoaded); this.activateTextlayerIfNecessary(null); setTimeout((/** * @return {?} */ function () { // This initializes the webviewer, the file may be passed in to it to initialize the viewer with a pdf directly _this.primaryMenuVisible = true; if (!_this.isSecondaryMenuVisible()) { _this.showSecondaryToolbarButton = false; } if (!_this.showSecondaryToolbarButton) { if (!_this.isPrimaryMenuVisible()) { _this.primaryMenuVisible = false; } } _this.calcViewerPositionTop(); ((/** @type {?} */ (window))).webViewerLoad(); ((/** @type {?} */ (window))).PDFViewerApplication.appConfig.defaultUrl = ''; // IE bugfix ((/** @type {?} */ (window))).PDFViewerApplication.appConfig.filenameForDownload = _this.filenameForDownload; ((/** @type {?} */ (window))).PDFViewerApplicationOptions.set('locale', _this.language); ((/** @type {?} */ (window))).PDFViewerApplicationOptions.set('imageResourcesPath', _this.imageResourcesPath); ((/** @type {?} */ (window))).PDFViewerApplication.isViewerEmbedded = true; window.addEventListener('keydown', ((/** @type {?} */ (window))).PDFViewerApplication.printKeyDownListener, true); /** @type {?} */ var pc = document.getElementById('printContainer'); if (pc) { document.getElementsByTagName('body')[0].appendChild(pc); } }), 0); }; /** * @return {?} */ NgxExtendedPdfViewerComponent.prototype.checkHeight = /** * @return {?} */ function () { /** @type {?} */ var container = document.getElementsByClassName('zoom')[0]; if (container.clientHeight === 0 && this._height.includes('%')) { /** @type {?} */ var available = window.innerHeight; /** @type {?} */ var rect = container.getBoundingClientRect(); /** @type {?} */ var top_1 = rect.top; /** @type {?} */ var mh = available - top_1; /** @type {?} */ var factor = Number(this._height.replace('%', '')); mh = (mh * factor) / 100; if (mh > 100) { this.minHeight = mh + 'px'; } else { this.minHeight = '100px'; } } }; /** * @param {?} newSpread * @return {?} */ NgxExtendedPdfViewerComponent.prototype.onSpreadChange = /** * @param {?} newSpread * @return {?} */ function (newSpread) { this.spreadChange.emit(newSpread); }; /** * @private * @param {?} options * @return {?} */ NgxExtendedPdfViewerComponent.prototype.activateTextlayerIfNecessary = /** * @private * @param {?} options * @return {?} */ function (options) { if (this.textLayer === undefined) { if (!this.handTool) { if (options) { options.set('textLayerMode', 1); } this.textLayer = true; if (this.showFindButton === undefined) { this.showFindButton = true; } } else { if (options) { options.set('textLayerMode', this.showHandToolButton ? 1 : 0); } if (!this.showHandToolButton) { if (this.showFindButton || this.showFindButton === undefined) { this.showFindButton = false; if (this.logLevel >= VerbosityLevel.WARNINGS) { // tslint:disable-next-line:max-line-length console.warn('Hiding the "find" button because the text layer of the PDF file is not rendered. Use [textLayer]="true" to enable the find button.'); } } if (this.showHandToolButton) { if (this.logLevel >= VerbosityLevel.WARNINGS) { // tslint:disable-next-line:max-line-length console.warn('Hiding the "hand tool / selection mode" menu because the text layer of the PDF file is not rendered. Use [textLayer]="true" to enable the the menu items.'); this.showHandToolButton = false; } } } } } else { if (this.textLayer) { if (options) { options.set('textLayerMode', 1); } this.textLayer = true; if (this.showFindButton === undefined) { this.showFindButton = true; } } else { if (options) { options.set('textLayerMode', 0); } this.textLayer = false; if (this.showFindButton) { if (this.logLevel >= VerbosityLevel.WARNINGS) { // tslint:disable-next-line:max-line-length console.warn('Hiding the "find" button because the text layer of the PDF file is not rendered. Use [textLayer]="true" to enable the find button.'); this.showFindButton = false; } } if (this.showHandToolButton) { if (this.logLevel >= VerbosityLevel.WARNINGS) { // tslint:disable-next-line:max-line-length console.warn('Hiding the "hand tool / selection mode" menu because the text layer of the PDF file is not rendered. Use [textLayer]="true" to enable the the menu items.'); this.showHandToolButton = false; } } } } }; /** * @private * @return {?} */ NgxExtendedPdfViewerComponent.prototype.overrideDefaultSettings = /** * @private * @return {?} */ function () { /** @type {?} */ var options = ((/** @type {?} */ (window))).PDFViewerApplicationOptions; // tslint:disable-next-line:forin for (var key in defaultOptions) { options.set(key, defaultOptions[key]); } options.set('disablePreferences', true); this.setZoom(); options.set('ignoreKeyboard', this.ignoreKeyboard); options.set('ignoreKeys', this.ignoreKeys); options.set('acceptKeys', this.acceptKeys); this.activateTextlayerIfNecessary(options); /** @type {?} */ var sidebarVisible = this.sidebarVisible; if (sidebarVisible === undefined) { sidebarVisible = this.showSidebarOnLoad; } if (sidebarVisible !== undefined) { ((/** @type {?} */ (window))).PDFViewerApplication.sidebarViewOnLoad = sidebarVisible ? 1 : 0; if (((/** @type {?} */ (window))).PDFViewerApplication.appConfig) { ((/** @type {?} */ (window))).PDFViewerApplication.appConfig.sidebarViewOnLoad = sidebarVisible ? 1 : 0; } options.set('sidebarViewOnLoad', this.sidebarVisible ? 1 : 0); } if (this.spread === 'even') { options.set('spreadModeOnLoad', 2); if (((/** @type {?} */ (window))).PDFViewerApplication.pdfViewer) { ((/** @type {?} */ (window))).PDFViewerApplication.pdfViewer.spreadMode = 2; } this.onSpreadChange('even'); } else if (this.spread === 'odd') { options.set('spreadModeOnLoad', 1); if (((/** @type {?} */ (window))).PDFViewerApplication.pdfViewer) { ((/** @type {?} */ (window))).PDFViewerApplication.pdfViewer.spreadMode = 1; } this.onSpreadChange('odd'); } else { options.set('spreadModeOnLoad', 0); if (((/** @type {?} */ (window))).PDFViewerApplication.pdfViewer) { ((/** @type {?} */ (window))).PDFViewerApplication.pdfViewer.spreadMode = 0; } this.onSpreadChange('off'); } if (this.printResolution) { options.set('printResolution', this.printResolution); } }; /** * @private * @return {?} */ NgxExtendedPdfViewerComponent.prototype.openPDF = /** * @private * @return {?} */ function () { var _this = this; ServiceWorkerOptions.showUnverifiedSignatures = this.showUnverifiedSignatures; NgxExtendedPdfViewerComponent.ngxExtendedPdfViewerInitialized = true; this.onResize(); if (!this.listenToURL) { ((/** @type {?} */ (window))).PDFViewerApplication.pdfLinkService.setHash = (/** * @return {?} */ function () { }); } this.initTimeout = null; this.selectCursorTool(); ((/** @type {?} */ (window))).PDFViewerApplication.eventBus.on('pagesloaded', (/** * @param {?} x * @return {?} */ function (x) { _this.pagesLoaded.emit(x); if (_this.rotation) { /** @type {?} */ var r = Number(_this.rotation); if (r === 0 || r === 90 || r === 180 || r === 270) { ((/** @type {?} */ (window))).PDFViewerApplication.pdfViewer.pagesRotation = r; } } else { ((/** @type {?} */ (window))).PDFViewerApplication.pdfViewer.pagesRotation = 0; } setTimeout((/** * @return {?} */ function () { if (_this.nameddest) { ((/** @type {?} */ (window))).PDFViewerApplication.pdfLinkService.navigateTo(_this.nameddest); } else if (_this.page) { ((/** @type {?} */ (window))).PDFViewerApplication.page = Number(_this.page); } else if (_this.pageLabel) { ((/** @type {?} */ (window))).PDFViewerApplication.pdfViewer.currentPageLabel = _this.pageLabel; } })); _this.setZoom(); })); ((/** @type {?} */ (window))).PDFViewerApplication.eventBus.on('pagerendered', (/** * @param {?} x * @return {?} */ function (x) { _this.ngZone.run((/** * @return {?} */ function () { _this.pageRendered.emit(x); })); })); ((/** @type {?} */ (window))).PDFViewerApplication.eventBus.on('download', (/** * @param {?} x * @return {?} */ function (x) { _this.ngZone.run((/** * @return {?} */ function () { _this.pdfDownloaded.emit(x); })); })); ((/** @type {?} */ (window))).PDFViewerApplication.eventBus.on('scalechanging', (/** * @param {?} x * @return {?} */ function (x) { _this.ngZone.run((/** * @return {?} */ function () { setTimeout((/** * @return {?} */ function () { _this.ngZone.run((/** * @return {?} */ function () { _this.currentZoomFactor.emit(x.scale); _this.emitZoomChange(); })); })); })); })); ((/** @type {?} */ (window))).PDFViewerApplication.eventBus.on('rotationchanging', (/** * @param {?} x * @return {?} */ function (x) { _this.ngZone.run((/** * @return {?} */ function () { _this.rotationChange.emit(x.pagesRotation); })); })); ((/** @type {?} */ (window))).PDFViewerApplication.eventBus.on('fileinputchange', (/** * @param {?} x * @return {?} */ function (x) { _this.ngZone.run((/** * @return {?} */ function () { /** @type {?} */ var path = x.fileInput.value.replace('C:\\fakepath\\', ''); _this.srcChange.emit(path); })); })); ((/** @type {?} */ (window))).PDFViewerApplication.eventBus.on('cursortoolchanged', (/** * @param {?} x * @return {?} */ function (x) { _this.ngZone.run((/** * @return {?} */ function () { _this.handToolChange.emit(x.tool === 1); })); })); ((/** @type {?} */ (window))).PDFViewerApplication.eventBus.on('sidebarviewchanged', (/** * @param {?} x * @return {?} */ function (x) { _this.ngZone.run((/** * @return {?} */ function () { _this.sidebarVisibleChange.emit(x.view === 1); })); })); ((/** @type {?} */ (window))).PDFViewerApplication.eventBus.on('updatefindcontrolstate', (/** * @param {?} x * @return {?} */ function (x) { if (_this.updateFindMatchesCount) { if (x.state === FindState.NOT_FOUND) { _this.updateFindMatchesCount.emit({ current: 0, total: 0 }); } else if (x.matchesCount.total) { _this.updateFindMatchesCount.emit(x.matchesCount); } } if (_this.updateFindState) { _this.updateFindState.emit(x.state); } })); ((/** @type {?} */ (window))).PDFViewerApplication.eventBus.on('updatefindmatchescount', (/** * @param {?} x * @return {?} */ function (x) { if (_this.updateFindMatchesCount) { if (x.matchesCount.total) { _this.updateFindMatchesCount.emit(x.matchesCount); } } })); ((/** @type {?} */ (window))).PDFViewerApplication.eventBus.on('pagechanging', (/** * @param {?} x * @return {?} */ function (x) { _this.ngZone.run((/** * @return {?} */ function () { /** @type {?} */ var currentPage = ((/** @type {?} */ (window))).PDFViewerApplication.pdfViewer.currentPageNumber; /** @type {?} */ var currentPageLabel = ((/** @type {?} */ (window))).PDFViewerApplication.pdfViewer.currentPageLabel; _this.pageChange.emit(currentPage); _this.pageLabelChange.emit(currentPageLabel); })); })); this.checkHeight(); // open a file in the viewer if (!!this._src) { /** @type {?} */ var options = { password: this.password, verbosity: this.logLevel }; ((/** @type {?} */ (window))).PDFViewerApplication.open(this._src, options).then((/** * @return {?} */ function () { return _this.pdfLoaded.emit({ pagesCount: ((/** @type {?} */ (window))).PDFViewerApplication.pagesCount }); }), (/** * @param {?} error * @return {?} */ function (error) { return _this.pdfLoadingFailed.emit(error); })); } setTimeout((/** * @return {?} */ function () { if (_this.page) { ((/** @type {?} */ (window))).PDFViewerApplication.page = Number(_this.page); } }), 100); }; /** * @private * @return {?} */ NgxExtendedPdfViewerComponent.prototype.selectCursorTool = /** * @private * @return {?} */ function () { ((/** @type {?} */ (window))).PDFViewerApplication.eventBus.dispatch('switchcursortool', { tool: this.handTool ? 1 : 0 }); }; /** * @return {?} */ NgxExtendedPdfViewerComponent.prototype.ngOnDestroy = /** * @return {?} */ function () { NgxExtendedPdfViewerComponent.ngxExtendedPdfViewerInitialized = false; if (this.initTimeout) { clearTimeout(this.initTimeout); this.initTimeout = undefined; } /** @type {?} */ var app = ((/** @type {?} */ (window))).PDFViewerApplication; if (app) { app.cleanup(); app.close(); if (((/** @type {?} */ (window))).PDFViewerApplication.printKeyDownListener) { ((/** @type {?} */ (window))).removeEventListener('keydown', ((/** @type {?} */ (window))).PDFViewerApplication.printKeyDownListener, true); } if (app._boundEvents) { app.unbindWindowEvents(); } /** @type {?} */ var bus = app.eventBus; if (bus) { app.unbindEvents(); for (var key in bus._listeners) { if (bus._listeners[key]) { /** @type {?} */ var list = bus._listeners[key]; // not sure if the for loop is necessary - but // it might improve garbage collection if the "listeners" // array is stored somewhere else for (var i = 0; i < list.length; i++) { list[i] = undefined; } bus._listeners[key] = undefined; } } } app.eventBus = null; } /** @type {?} */ var body = document.getElementsByTagName('body'); if (body[0]) { /** @type {?} */ var topLevelElements = body[0].children; for (var i = topLevelElements.length - 1; i >= 0; i--) { /** @type {?} */ var e = topLevelElements.item(i); if (e && e.id === 'printContainer') { body[0].removeChild(e); } else if (e && e.id === 'fileInput') { body[0].removeChild(e); } } } }; /** * @private * @return {?} */ NgxExtendedPdfViewerComponent.prototype.isSecondaryMenuVisible = /** * @private * @return {?} */ function () { /** @type {?} */ var visible = this.showHandToolButton || this.showPagingButtons || this.showPropertiesButton || this.showRotateButton || this.showScrollingButton || this.showRotateButton || this.showSpreadButton; if (visible) { return true; } return false; }; /** * @private * @return {?} */ NgxExtendedPdfViewerComponent.prototype.isPrimaryMenuVisible = /** * @private * @return {?} */ function () { /** @type {?} */ var visible = this.showBookmarkButton || this.showDownloadButton || this.showFindButton || this.showOpenFileButton || this.showPagingButtons || this.showPresentationModeButton || this.showPrintButton || this.showPropertiesButton || this.showSidebarButton || this.showSecondaryToolbarButton || this.showZoomButtons; if (visible) { return true; } return false; }; /** * @param {?} changes * @return {?} */ NgxExtendedPdfViewerComponent.prototype.ngOnChanges = /** * @param {?} changes * @return {?} */ function (changes) { var _this = this; if (NgxExtendedPdfViewerComponent.ngxExtendedPdfViewerInitialized) { if ('src' in changes || 'base64Src' in changes) { if (!!this._src) { this.overrideDefaultSettings(); ((/** @type {?} */ (window))).PDFViewerApplication.open(this._src).then((/** * @return {?} */ function () { return _this.pdfLoaded.emit({ pagesCount: ((/** @type {?} */ (window))).PDFViewerApplication.pagesCount }); }), (/** * @param {?} error * @return {?} */ function (error) { return _this.pdf