UNPKG

@progress/kendo-ui

Version:

This package is part of the [Kendo UI for jQuery](http://www.telerik.com/kendo-ui) suite.

1,405 lines (1,245 loc) 89.3 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); require('./kendo.mobile.scroller.js'); require('./kendo.toolbar.js'); require('./kendo.pager.js'); require('./kendo.combobox.js'); require('./kendo.textbox.js'); require('./kendo.core.js'); require('./html-CDPyBXgE.js'); require('./kendo.upload.js'); var kendoPdfviewerCommon = require('@progress/kendo-pdfviewer-common'); require('./kendo.dialog.js'); require('./kendo.window.js'); require('./kendo.binder.js'); require('./kendo.numerictextbox.js'); require('./kendo.dropdownlist.js'); require('./kendo.icons.js'); require('./kendo.draganddrop.js'); require('pdfjs-dist/build/pdf.worker.mjs'); require('./kendo.fx.js'); require('./kendo.userevents.js'); require('./kendo.splitbutton.js'); require('./kendo.html.button.js'); require('./kendo.html.base.js'); require('./kendo.html.icon.js'); require('@progress/kendo-svg-icons'); require('./kendo.button.menu.js'); require('./kendo.popup.js'); require('./kendo.dropdownbutton.js'); require('./kendo.buttongroup.js'); require('./kendo.togglebutton.js'); require('./kendo.button.js'); require('./kendo.badge.js'); require('./kendo.menu.js'); require('./kendo.data.js'); require('./kendo.data.odata.js'); require('./kendo.data.xml.js'); require('./kendo.list.js'); require('./kendo.label.js'); require('./kendo.floatinglabel.js'); require('./kendo.actionsheet.js'); require('./dropdowns-loader-CMg_pnLB.js'); require('./kendo.virtuallist.js'); require('./valueMapper-CU-4EASG.js'); require('./prefix-suffix-containers-BmDm564f.js'); require('@progress/kendo-drawing'); require('./kendo.color.js'); require('./kendo.progressbar.js'); (function($, undefined$1) { var kendo = window.kendo, extend = $.extend, Class = kendo.Class; var DPLProcessor = Class.extend({ init: function(options, viewer) { var that = this; that.options = options; that.read = options.read; that.upload = options.upload; that.download = options.download; that.viewer = viewer; }, fetchDocument: function() { var that = this, deferred = $.Deferred(), errorMessages = that.viewer.options.messages.errorMessages; if (!that.read) { return deferred.resolve(); } $.ajax({ type: that.read.type, url: that.read.url, dataType: that.read.dataType, success: function(data) { if (typeof data != "string") { data = kendo.stringify(data); } deferred.resolve(JSON.parse(data)); }, error: function(xhr) { that.viewer._triggerError({ error: xhr.responseText, message: errorMessages.parseError }); } }); return deferred; }, fetchPageData: function(number) { var that = this; var deferred = $.Deferred(); var page = that.viewer.document.pages[number - 1]; var data = {}; data[that.read.pageField] = number; if (!page.geometries.length) { $.ajax({ type: that.read.type, url: that.read.url, data: data, success: function(data) { deferred.resolve(JSON.parse(data)); }, error: function(xhr) { that.viewer._triggerError({ error: xhr.responseText, message: that.viewer.options.messages.errorMessages.parseError }); } }); } else { deferred.resolve(page); } return deferred; }, downloadFile: function(fileName) { window.location = this.download.url + "?file=" + fileName; }, fromJSON: function(json) { var viewer = this.viewer; viewer._clearPages(); viewer.document = json; viewer.document.total = viewer.document.pages.length; viewer._renderPages(); viewer.resize(true); viewer.activatePage(1); } }); extend(kendo, { pdfviewer: { dpl: { processor: DPLProcessor } } }); })(window.kendo.jQuery); /* eslint no-console: ["error", { allow: ["warn", "error"] }] */ function isLoaded() { if (!window.pdfjsLib) { console?.error(`PDF.JS library is required. Make sure that it is properly loaded <script src="https://cdnjs.cloudflare.com/ajax/libs/pdf.js/4.3.136/pdf.mjs" type="module"></script>`); return false; } if (!window.pdfjsLib?.GlobalWorkerOptions?.workerSrc && !window.pdfjsWorker) { console?.error(`The pdf.worker.mjs script is not loaded. The PDF.JS library will not work correctly. Either load the script: <script src="https://cdnjs.cloudflare.com/ajax/libs/pdf.js/4.3.136/pdf.worker.mjs" type="module"></script> Or set it to the GlobalWorkerOptions.workerSrc property: <script type="module"> pdfjsLib.GlobalWorkerOptions.workerSrc = 'https://cdnjs.cloudflare.com/ajax/libs/pdf.js/4.3.136/pdf.worker.mjs'; </script>`); return false; } return true; } kendo.pdfviewer.pdfjs = { lib: window.pdfjsLib }; (function($, undefined$1) { var Class = kendo.Class, extend = $.extend, parseJSON = JSON.parse, progress = kendo.ui.progress, Class = kendo.Class, OPEN = "open"; var UploadHelper = Class.extend({ init: function(viewer) { this.viewer = viewer; this.errorMessages = this.viewer.options.messages.errorMessages; this.upload = this.viewer.processor && this.viewer.processor.upload; }, _initUpload: function(uploadElement, extendUploadOptions) { var uploadOptions = extend({ select: this._onSelect.bind(this), success: this._onSuccess.bind(this), error: this._onError.bind(this), complete: this._onComplete.bind(this), showFileList: false, multiple: false, validation: { allowedExtensions: [".pdf"] } }, extendUploadOptions || {}); if (this.upload) { extend(uploadOptions, { async: { saveUrl: this.upload.url, autoUpload: true, saveField: this.upload.saveField } }); } var upload = (uploadElement || $('<input name="files" accept=".pdf" type="file" />')).kendoUpload(uploadOptions).getKendoUpload(); return upload; }, _onComplete: function() { progress(this.viewer.pageContainer, false); }, _onSuccess: function(e) { var json = parseJSON(e.response); if ($.isPlainObject(json)) { this.viewer.processor.fromJSON(json); } else { this.viewer._triggerError({ error: json, message: this.errorMessages.parseError }); } }, _onError: function(e) { this.viewer._triggerError({ error: e.XMLHttpRequest.responseText, message: this.errorMessages.notSupported }); }, _onSelect: function(e) { var that = this; var fileToUpload = e.files[0]; progress(that.viewer.pageContainer, true); if (that.viewer.trigger(OPEN, { file: fileToUpload }) || that.upload) { return; } else if (fileToUpload.extension.toLowerCase() !== ".pdf") { that.viewer._triggerError({ error: fileToUpload, message: that.errorMessages.notSupported }); return; } var reader = new FileReader(); reader.onload = function(e) { var document = e.target.result; that.viewer.fromFile(document); }; reader.onerror = function() { that.viewer._triggerError({ error: fileToUpload, message: that.errorMessages.parseError }); }; reader.readAsArrayBuffer(fileToUpload.rawFile); } }); extend(kendo.pdfviewer, { UploadHelper: UploadHelper }); })(window.kendo.jQuery); (function($, undefined$1) { var extend = $.extend, noop = $.noop, drawing = kendo.drawing, Group = drawing.Group, Surface = drawing.Surface, RENDER = "render", Class = kendo.Class, UploadHelper = kendo.pdfviewer.UploadHelper; var geometryTypes = { Path: "path", MultiPath: "multipath", Rect: "rect", Image: "image", Text: "text" }; var BLANK_PAGE_TEMPLATE = (dropzoneId) => `<div class="k-page k-blank-page"> <div id="${dropzoneId}" class="k-external-dropzone"> <div class="k-dropzone-inner"> <span class="k-dropzone-icon k-icon k-svg-icon k-icon-xxxl k-svg-i-upload"> <svg aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"> <path d="M32 384v96h448v-96H32zm192-64h64V192h96L256 32 128 192h96v128z"></path> </svg> </span> <span class="k-dropzone-hint">Drag and drop files here to upload</span> </div> </div> <input name="files" accept=".pdf" type="file" ref-pdfviewer-blank-page-upload> </div>`; var Page = Class.extend({ init: function(options, viewer) { this.viewer = viewer; this.processor = options.processor; this.options = options; this.pageNumber = options.number; this.element = $("<div class='k-page' />"); this.element.attr(kendo.attr("number"), this.pageNumber); this._updatePageSize(options); this.width = options.width; this.height = options.height; }, resize: function(ratio) { var pageElement = this.element; this._updatePageSize({ width: Math.min(pageElement.width() * ratio, this.width), height: Math.min(pageElement.height() * ratio, this.height) }); }, _updatePageSize: function(size) { this.element .width(size.width) .height(size.height); }, destroy: function() { kendo.destroy(this.element); }, render: noop }); var BlankPage = Page.extend({ init: function(options, viewer) { this.viewer = viewer; this.options = options; this._externalDropZoneId = `${viewer.element.attr("id")}-external-dropzone`; this.element = $(BLANK_PAGE_TEMPLATE(this._externalDropZoneId)); this._uploadHelper = new UploadHelper(viewer); }, _initUpload: function() { this._upload = this._uploadHelper._initUpload(this.element.find("input[ref-pdfviewer-blank-page-upload]"), { dropZone: `#${this._externalDropZoneId}`, showFileList: false, async: { autoUpload: false, saveUrl: "save" } }); }, resize: noop, _updatePageSize: noop, destroy: function() { if (this._upload) { this._upload.destroy(); } kendo.destroy(this.element); }, render: noop }); var DPLPage = Page.extend({ draw: function() { var that = this, geometries = that.options.geometries; that.group = new Group(); that.surface.draw(that.group); that._drawGeometries(geometries); that.viewer.trigger(RENDER, { page: this }); kendo.ui.progress(that.element, false); }, load: function() { var that = this; if (that.loaded || !that.processor) { return; } that.processor.fetchPageData(that.pageNumber).then(function(data) { that.options = data; that._initSurface(); that.draw(); }); that.loaded = true; }, _initSurface: function() { var size = { width: this.element.width(), height: this.element.height() }; var surfaceOptions = extend({ width: this.width, height: this.height }, this.viewer.options.view); this.surface = new Surface(this.element, surfaceOptions); this._updatePageSize(size); }, _drawGeometries: function(geometries) { var that = this, kGeometry; if (!geometries) { return; } for (var i = 0; i <= geometries.length; i++) { var geometry = geometries[i]; if (!geometry) { continue; } switch (geometry.type) { case geometryTypes.Path: case geometryTypes.MultiPath: kGeometry = that._drawPath(geometry); break; case geometryTypes.Rect: kGeometry = that._drawRect(geometry); break; case geometryTypes.Image: kGeometry = that._drawImage(geometry); break; case geometryTypes.Text: kGeometry = that._drawText(geometry); break; default: kGeometry = null; break; } if (kGeometry) { that.group.append(kGeometry); } } }, _drawRect: function(geometry) { var rectGeo = new kendo.geometry.Rect(geometry.point, geometry.size); return new drawing.Rect(rectGeo, { transform: this._getMatrix(geometry.transform), fill: geometry.fillOptions, stroke: geometry.strokeOptions }); }, _drawImage: function(geometry) { var imageRect = new kendo.geometry.Rect(geometry.point, geometry.size); return new drawing.Image(geometry.src, imageRect, { transform: this._getMatrix(geometry.transform) }); }, _drawText: function(geometry) { var options = { transform: this._getMatrix(geometry.transform), stroke: geometry.strokeOptions, fill: geometry.fillOptions, font: geometry.font }; return new kendo.drawing.Text(geometry.content, geometry.point, options); }, _drawPath: function(geometry) { var options = { transform: this._getMatrix(geometry.transform), stroke: geometry.strokeOptions, fill: geometry.fillOptions }; var path = new drawing.MultiPath(options); for (var i = 0; i < geometry.paths.length; i++) { var subPath = geometry.paths[i]; if (!subPath.segments) { return; } path.moveTo.apply(path, subPath.point); for (var j = 0; j < subPath.segments.length; j++) { var segment = subPath.segments[j]; var drawAction = segment.points.length === 1 ? path.lineTo : path.curveTo; drawAction.apply(path, segment.points); } if (subPath.closed) { path.close(); } } return path; }, _getMatrix: function(transform) { var matrix = Object.create(kendo.geometry.Matrix.prototype); kendo.geometry.Matrix.apply(matrix, transform); return matrix; } }); extend(kendo.pdfviewer.dpl, { geometryTypes: geometryTypes, Page: DPLPage }); extend(kendo.pdfviewer, { BlankPage: BlankPage }); })(window.kendo.jQuery); (function($, undefined$1) { var kendo = window.kendo, extend = $.extend, progress = kendo.ui.progress, Class = kendo.Class, UploadHelper = kendo.pdfviewer.UploadHelper, ZOOMSTART = "zoomStart", ZOOMEND = "zoomEnd"; var Command = Class.extend({ init: function(options) { this.options = options; this.viewer = options.viewer; this.errorMessages = this.viewer.options.messages.errorMessages; } }); var OpenCommand = Command.extend({ init: function(options) { Command.fn.init.call(this, options); this._uploadHelper = new UploadHelper(this.viewer); }, exec: function() { this.viewer._upload = this.viewer._upload || this._uploadHelper._initUpload(); this.viewer._upload.element.click(); }, }); var PageChangeCommand = Command.extend({ exec: function() { var targetPage = this.options.value, viewer = this.viewer, current, total; if (isNaN(targetPage)) { current = viewer._pageNum; total = viewer.document.total || viewer.document.numPages; switch (targetPage) { case "first": targetPage = 1; break; case "prev": targetPage = current > 1 ? current - 1 : 1; break; case "next": targetPage = current < total ? current + 1 : total; break; case "last": targetPage = total; break; } } else { targetPage = Number(targetPage); } viewer.activatePage(targetPage, false); } }); var DownloadCommand = Command.extend({ exec: function() { const that = this; if (!that.viewer.document) { that.viewer._triggerError({ message: that.errorMessages.notFound }); return; } const fileName = (that.viewer.document.info && that.viewer.document.info.title) || that.viewer.options.messages.defaultFileName; if (that.viewer._isDPLProcessor()) { that.viewer.processor.downloadFile(fileName); } else { kendoPdfviewerCommon.download( { pdf: this.viewer.document, error: (e) => { that.viewer._triggerError({ message: e.message }); } }, fileName, {}, (blob, fileName, saveOptions) => false ); } } }); var ExportCommand = Command.extend({ init: function(options) { options = $.extend(options, this.options); Command.fn.init.call(this, options); }, exec: function() { var dialog = (this.viewer._saveDialog || this._initDialog()); dialog._updateModel({ pagesCount: (this.viewer.document && this.viewer.document.total) || 1, page: this.viewer.options.page }); dialog.open(); }, apply: function(viewModel) { var extension = viewModel.extension; if (extension === ".png") { this.viewer.exportImage(viewModel); } else if (extension === ".svg") { this.viewer.exportSVG(viewModel); } }, _initDialog: function() { this.viewer._saveDialog = new kendo.pdfviewer.dialogs.ExportAsDialog({ apply: this.apply.bind(this), pagesCount: (this.viewer.document && this.viewer.document.total) || 1, messages: this.viewer.options.messages }); return this.viewer._saveDialog; } }); var EnableSelectionCommand = Command.extend({ exec: function() { var that = this, viewer = that.viewer; viewer._toggleSelection(true); } }); var EnablePanCommand = Command.extend({ exec: function() { var that = this, viewer = that.viewer; viewer._toggleSelection(false); } }); const OpenSearchCommand = Command.extend({ init: function(options) { const that = this; that.viewer = options.viewer; if (!that.viewer.searchDialog) { that.viewer.searchDialog = new kendo.pdfviewer.dialogs.SearchDialog({ pageContainer: that.viewer.pageContainerWrapper, position: { top: that.viewer.pageContainer.offset().top, left: that.viewer.pageContainer.offset().left }, messages: that.viewer.options.messages.dialogs.search, open: that._open.bind(that), next: that._next.bind(that), prev: that._prev.bind(that), close: that._close.bind(that) }); } Command.fn.init.call(that, options); }, exec: function() { const that = this; that.viewer.searchDialog.open(); }, _open: function() { const that = this; if (!that.searchService) { Promise.all(that.viewer._loadAllPages()).then(() => { // Pages, On success, On error that.searchService = new kendoPdfviewerCommon.SearchService({ textContainers: that.viewer.pageContainer.find('.k-text-layer').get() || [] }); that.changeHandler = that._change.bind(that); that.viewer.searchDialog.searchModel.bind("change", that.changeHandler); }); } }, _close: function() { const that = this; that.searchService.destroy(); that.searchService = null; that.viewer.toolbar.element.find("[tabindex=0]").trigger("focus"); that.viewer.searchDialog.searchModel.unbind("change", that.changeHandler); that.matches = []; that.matchIndex = null; that._updateSearchModel(); }, _change: function(ev) { const that = this, text = that.viewer.searchDialog.searchModel["searchText"], matchCase = that.viewer.searchDialog.searchModel["matchCase"]; if (ev.field === "searchText" || ev.field === "matchCase") { that.matches = that.searchService.search({ text: text, matchCase: matchCase }); that.matchIndex = that.matches.length ? 1 : 0; that._updateSearchModel(); } }, _next: function() { const that = this, pdfScroller = that.viewer.pdfScroller; kendoPdfviewerCommon.goToNextSearchMatch({ search: that.searchService, scroller: pdfScroller }); that.matchIndex = that.matchIndex + 1 > that.matches.length ? 1 : that.matchIndex + 1; that._updateSearchModel(); }, _prev: function() { const that = this, pdfScroller = that.viewer.pdfScroller; kendoPdfviewerCommon.goToPreviousSearchMatch({ search: that.searchService, scroller: pdfScroller }); that.matchIndex = that.matchIndex - 1 < 1 ? that.matches.length : that.matchIndex - 1; that._updateSearchModel(); }, _updateSearchModel: function() { const that = this, model = that.viewer.searchDialog.searchModel; if (that.matches && that.matches.length) { model.set("matches", that.matches.length); model.set("matchIndex", that.matchIndex); } else { model.set("searchText", ""); model.set("matches", 0); model.set("matchIndex", 0); } }, _closeDialog: function() { const that = this; that.viewer.searchDialog.close(); } }); var ZoomCommand = Command.extend({ exec: function() { const that = this, options = that.options, viewer = that.viewer; let scale = options.value || options.scale; if (viewer.processingLib === "dpl") { return; } scale = that._calculateZoom(); if (!scale) { return; } viewer.zoomScale = scale; viewer._setPageContainerScaleFactor(scale); if (that.viewer.document) { kendoPdfviewerCommon.reloadDocument({ pdfDoc: viewer.document, zoom: scale, dom: viewer.pageContainer[0], rootElement: viewer.element[0], loadOnDemand: true, done: (pdfPages) => { const currentPageIndex = kendoPdfviewerCommon.currentPage(viewer.element[0]); viewer._pageRenderPromise(pdfPages[currentPageIndex], true); that._triggerZoomEnd(scale); }, error: (e) => { that._triggerZoomEnd(scale); } }); } }, _calculateZoom: function() { var options = this.options, viewer = this.viewer, viewerOptions = viewer.options, pageContainer = viewer.pageContainer, scale = options.value || options.scale, scaleValue = scale, preventZoom; viewer._allowResize = false; viewer._autoFit = false; if (options.zoomIn) { scaleValue = scale = viewer.zoomScale + viewerOptions.zoomRate; } else if (options.zoomOut) { scaleValue = scale = viewer.zoomScale - viewerOptions.zoomRate; } else if (scale === "auto") { viewer._allowResize = true; scaleValue = viewer._autoZoomScale; } else if (typeof scale === "string" && !kendo.parseFloat(scale)) { scaleValue = kendoPdfviewerCommon.calculateZoomLevel(0, scale, viewer.zoomScale, pageContainer[0]); } else if (scale && scale.toString().match(/^[0-9]+%?$/)) { scale = parseInt(scale.replace('%', ''), 10) / 100; scaleValue = scale; } else { preventZoom = isNaN(scale); } if (!preventZoom) { preventZoom = scale < viewerOptions.zoomMin || scale > viewerOptions.zoomMax; } if (preventZoom || viewer.trigger(ZOOMSTART, { scale: scale })) { return; } if (options.updateComboBox && viewer.toolbar) { viewer._updateZoomComboBox(scale); } return scaleValue; }, _triggerZoomEnd: function(scale) { var that = this, viewer = that.viewer; viewer.trigger(ZOOMEND, { scale: scale }); } }); var PrintCommand = Command.extend({ init: function(options) { Command.fn.init.call(this, options); }, exec: function() { const that = this; if (!that.viewer.document) { that.viewer._triggerError({ message: this.errorMessages.notFound }); return; } progress(that.viewer.pageContainer, true); Promise.all(that.viewer._loadAllPages()).then(() => { // Pages, On success, On error kendoPdfviewerCommon.print(that.viewer.pages, that.onPrintComplete.bind(that), that.onPrintError.bind(that)); }); }, onPrintComplete: function() { const that = this; progress(that.viewer.pageContainer, false); }, onPrintError: function() { const that = this; progress(that.viewer.pageContainer, false); that.viewer._triggerError({ message: that.errorMessages.popupBlocked }); } }); extend(kendo.pdfviewer, { OpenCommand: OpenCommand, PageChangeCommand: PageChangeCommand, DownloadCommand: DownloadCommand, EnableSelectionCommand: EnableSelectionCommand, EnablePanCommand: EnablePanCommand, ExportCommand: ExportCommand, PrintCommand: PrintCommand, OpenSearchCommand: OpenSearchCommand, ZoomCommand: ZoomCommand }); })(window.kendo.jQuery); (function($, undefined$1) { var kendo = window.kendo, encode = kendo.htmlEncode, extend = $.extend, Class = kendo.Class, Draggable = kendo.ui.Draggable, outerWidth = kendo._outerWidth, EXTENSIONS = { svg: ".svg", png: ".png" }, keys = kendo.keys; var ErrorDialog = Class.extend({ init: function(options) { this.options = extend(options, { actions: [{ text: options.messages.dialogs.okText }] }); this._dialog = $("<div />") .kendoDialog(this.options) .getKendoDialog(); }, open: function() { this._dialog.center().open(); } }); var ExportAsDialog = Class.extend({ init: function(options) { this.options = extend(options, this.options, { fileFormats: [{ description: options.messages.dialogs.exportAsDialog.png, extension: EXTENSIONS.png }, { description: options.messages.dialogs.exportAsDialog.svg, extension: EXTENSIONS.svg }], title: options.messages.dialogs.exportAsDialog.title, open: function() { this.center(); } }); this._initializeDialog(); return this; }, options: { extension: EXTENSIONS.png, autoFocus: true, resizable: false, modal: { preventScroll: true }, width: "90%", maxWidth: 520, template: ({ messages, total }) => `<div class='k-edit-label'><label>${encode(messages.exportAsDialog.labels.fileName)}:</label></div>` + "<div class='k-edit-field'>" + "<span class='k-textbox k-input k-input-md k-rounded-md k-input-solid'><input class='k-input-inner' data-bind='value: name' /></span>" + "</div>" + "<div>" + `<div class='k-edit-label'><label>${encode(messages.exportAsDialog.labels.saveAsType)}:</label></div>` + "<div class='k-edit-field'>" + "<select data-role='dropdownlist' class='k-file-format' " + "data-text-field='description' " + "data-value-field='extension' " + "data-bind='value: extension, source: fileFormats'></select>" + "</div>" + "</div>" + `<div class='k-edit-label'><label>${encode(messages.exportAsDialog.labels.page)}:</label></div>` + "<div class='k-edit-field'>" + `<input data-role='numerictextbox' data-format='n0' data-min='1' data-max='${encode(total)}' data-bind='value: page' />` + "</div>" + "<div class='k-actions'>" + `<button class='k-button k-button-md k-rounded-md k-button-solid k-button-solid-primary' data-bind='click: apply'><span class='k-button-text'>${encode(messages.save)}</span></button>` + `<button class='k-button k-button-md k-rounded-md k-button-solid k-button-solid-base' data-bind='click: close'><span class='k-button-text'>${encode(messages.cancel)}</span></button>` + "</div>" }, _updateModel: function(options) { if (options.pagesCount) { this.viewModel.set("pagesCount", options.pagesCount); } if (options.page) { this.viewModel.set("page", options.page); } }, _initializeDialog: function() { var that = this; var options = that.options; var dialogMessages = options.messages.dialogs; var dialog = $("<div class='k-pdf-viewer-window k-action-window k-popup-edit-form' />") .append(kendo.template(options.template)({ total: options.pagesCount, messages: dialogMessages })) .kendoWindow(options) .getKendoWindow(); that.viewModel = kendo.observable({ title: dialogMessages.exportAsDialog.title, name: dialogMessages.exportAsDialog.defaultFileName, extension: options.extension, fileFormats: options.fileFormats, pagesCount: options.pagesCount, page: 1, apply: that.apply.bind(this), close: function() { dialog.close(); } }); that._dialog = dialog; kendo.bind(dialog.element, that.viewModel); return dialog; }, open: function() { this._dialog.center().open(); }, apply: function() { this._dialog.close(); this.options.apply({ fileName: this.viewModel.name + this.viewModel.extension, extension: this.viewModel.extension, page: this.viewModel.page }); } }); var SearchDialog = Class.extend({ init: function(options) { var that = this; that.options = extend({}, options, that.options); }, options: { resizable: false, template: ({ messages }) => '<div class="k-search-panel k-pos-sticky k-top-center">' + `<button aria-label='${encode(messages.dragHandle)}' class='k-button k-button-md k-rounded-md k-button-flat k-button-flat-base k-icon-button k-search-dialog-draghandle'>${kendo.ui.icon({ icon: "handle-drag", iconClass: "k-button-icon" })}</button>` + "<span class='k-textbox k-input k-input-md k-rounded-md k-input-solid'>" + `<input class='k-search-dialog-input k-input-inner' data-bind='value: boundValue, events: { keyup: onKeyup, input: onInput }' aria-label='${encode( messages.inputLabel)}' title='${encode(messages.inputLabel)}' />` + `<span class='k-input-suffix'><button class='k-button k-button-md k-rounded-md k-button-flat k-button-flat-base k-icon-button k-match-case-button k-match-case-button' data-bind='css: {k-selected: matchCase}, click: matchCaseClick' aria-label='${encode(messages.matchCase)}' title='${encode(messages.matchCase)}'>${kendo.ui.icon({ icon: "convert-lowercase", iconClass: "k-button-icon" })}</button></span>` + "</span>" + `<span class='k-search-matches'><span data-bind='text: matchIndex'></span> ${encode(messages.of)} <span data-bind='text: matches'></span></span>` + `<button class='k-button k-button-md k-rounded-md k-button-flat k-button-flat-base k-icon-button' data-bind='click: prev' aria-label='${encode(messages.previous)}' title='${encode(messages.previous)}'>${kendo.ui.icon({ icon: "arrow-up", iconClass: "k-button-icon" })}</button>` + `<button class='k-button k-button-md k-rounded-md k-button-flat k-button-flat-base k-icon-button' data-bind='click: next' aria-label='${encode(messages.next)}' title='${encode(messages.next)}'>${kendo.ui.icon({ icon: "arrow-down", iconClass: "k-button-icon" })}</button>` + `<button class='k-button k-button-md k-rounded-md k-button-flat k-button-flat-base k-icon-button' data-bind='click: close' aria-label='${encode(messages.close)}' title='${encode(messages.close)}'>${kendo.ui.icon({ icon: "x", iconClass: "k-button-icon" })}</button>` + "</div>" }, open: function() { var that = this; if (!that.dialog) { that._initializeDialog(); } that.options.open(); that._showSearchDialog(); }, close: function() { var that = this; that.options.close(); that._hideSearchDialog(); }, _showSearchDialog: function() { var that = this; that.dialog.css("left",`${(that.options.pageContainer.innerWidth() / 2) - (outerWidth(that.dialog, true) / 2)}px`); that.dialog.kendoStop().kendoAnimate({ effects: { zoom: { direction: "in" }, fade: { direction: "in" } }, duration: 350, complete: function(ev) { that.dialog.find(".k-search-dialog-input").trigger("focus"); } }); }, _hideSearchDialog: function() { var that = this; that.dialog.kendoStop().kendoAnimate({ effects: { zoom: { direction: "out", properties: { scale: 0.7 } }, fade: { direction: "out" } }, duration: 350, hide: true }); }, _initializeDialog: function() { var that = this; var template = kendo.template(that.options.template); var dialogElm = $(template({ messages: that.options.messages })); that.options.pageContainer.prepend(dialogElm); that.dialog = dialogElm; that._draggable = new Draggable(dialogElm, { filter: ".k-search-dialog-draghandle", axis: "x", dragstart: function(e) { var wnd = that.dialog; var containment = that.options.pageContainer; wnd.startPosition = { left: e.x.client - kendo.getOffset(wnd, "position").left, }; if (!containment) { return null; } containment._innerWidth = containment.innerWidth(); if (parseInt(containment._innerWidth, 10) > containment[0].clientWidth) { containment._innerWidth -= kendo.support.scrollbar(); } wnd.maxLeft = containment._innerWidth - outerWidth(wnd, true); }, drag: function(e) { var wnd = that.dialog; var position = {}; var left; left = e.x.client - wnd.startPosition.left; if (left && isNaN(left) && left.toString().indexOf("px") < 0) { position.left = left; } else { position.left = Math.max( Math.min(parseInt(left, 10), parseInt(wnd.maxLeft, 10)), 0 ); } wnd.css(position); }, }); that._draggable.userEvents.stopPropagation = false; that.searchModel = kendo.observable({ boundValue: "", searchText: "", matchCase: false, matchIndex: 0, matches: 0, matchCaseClick: function() { this.set("matchCase", !this.matchCase); }, next: that.options.next, prev: that.options.prev, close: function() { this.set("boundValue", ""); that.close(); }, onKeyup: function(ev) { var key = ev.keyCode; var navigationFn = ev.shiftKey ? this.prev : this.next; if (key === keys.ENTER) { navigationFn(); ev.preventDefault(); } else if (key == keys.ESC) { this.close(); } }, onInput: function(ev) { this.set("searchText", ev.target.value); } }); kendo.bind(dialogElm, that.searchModel); } }); extend(kendo.pdfviewer, { dialogs: { ErrorDialog: ErrorDialog, ExportAsDialog: ExportAsDialog, SearchDialog: SearchDialog } }); })(window.kendo.jQuery); const __meta__ = { id: "pdfviewer", name: "PDFViewer", category: "web", description: "PDFViewer to display pdfs in the browser", depends: ["core", "window", "dialog", "toolbar", "draganddrop", "upload", "combobox", "drawing", "binder", "dropdownlist", "numerictextbox", "textbox", "pager"] }; (function($, undefined$1) { var NS = ".kendoPDFViewer", kendo = window.kendo, ui = kendo.ui, extend = $.extend, drawing = kendo.drawing, keys = $.extend({ PLUS: 187, MINUS: 189, ZERO: 48, NUMPAD_ZERO: 96 }, kendo.keys), Page, BlankPage = kendo.pdfviewer.BlankPage, Widget = ui.Widget, progress = kendo.ui.progress, SCROLL = "scroll", RENDER = "render", OPEN = "open", ERROR = "error", KEYDOWN = "keydown" + NS, MOUSEWHEEL = "DOMMouseScroll" + NS + " mousewheel" + NS, UPDATE = "update", PAGE_CHANGE = "pagechange", ZOOMSTART = "zoomStart", ZOOMEND = "zoomEnd", ZOOMCOMMAND = "ZoomCommand", WHITECOLOR = "#ffffff", TABINDEX = "tabindex", CLICK = "click", CHANGE = "change", TOGGLE = "toggle", DISABLED = 'k-disabled', PROCESSORS = { pdfjs: "pdfjs", dpl: "dpl" }, styles = { viewer: "k-pdf-viewer", scroller: "k-canvas k-pdf-viewer-canvas k-pos-relative k-overflow-auto", enableTextSelection: "k-enable-text-select", enablePanning: "k-enable-panning", highlightClass: "k-search-highlight", highlightMarkClass: "k-search-highlight-mark", charClass: "k-text-char" }, PREDEFINED_ZOOM_VALUES = { auto: "auto", actual: "ActualWidth", fitToWidth: "FitToWidth", fitToPage: "FitToPage" }; var PDFViewer = Widget.extend({ init: function(element, options) { var that = this; Widget.fn.init.call(that, element, kendo.deepExtend({}, this.options, options)); that._processMessages(); that._wrapper(); if (that.options.toolbar) { that._renderToolbar(); } that._initProcessor(options || {}); that._renderPageContainer(); if (that._isDPLProcessor()) { that._loadDPLDocument(); } else { that._loadPdfJSDocument(); } kendo.notify(that, kendo.ui); if (that._showWatermarkOverlay) { that._showWatermarkOverlay(that.wrapper[0]); } }, events: [ RENDER, OPEN, ERROR, ZOOMSTART, ZOOMEND ], options: { name: "PDFViewer", view: { type: "canvas" }, pdfjsProcessing: { file: null, loadOnDemand: true }, dplProcessing: { read: { url: null, type: "GET", dataType: "json", pageField: "pageNumber" }, upload: { url: null, saveField: "file" }, download: { url: null }, loadOnDemand: false }, toolbar: { items: [] }, width: 1000, height: 1200, page: 1, defaultPageSize: { width: 794, height: 1123 }, scale: null, zoomMin: 0.5, zoomMax: 4, zoomRate: 0.25, messages: { defaultFileName: "Document", toolbar: { zoom: { zoomLevel: "zoom level", zoomOut: "Zoom Out", zoomIn: "Zoom In", actualWidth: "Actual Width", autoWidth: "Automatic Width", fitToWidth: "Fit to Width", fitToPage: "Fit to Page" }, open: "Open", exportAs: "Export", download: "Download", print: "Print", toggleSelection: "Enable Selection", togglePan: "Enable Panning", search: "Search" }, errorMessages: { notSupported: "Only pdf files allowed.", parseError: "PDF file fails to process.", notFound: "File is not found.", popupBlocked: "Popup is blocked." }, dialogs: { exportAsDialog: { title: "Export...", defaultFileName: "Document", pdf: "Portable Document Format (.pdf)", png: "Portable Network Graphics (.png)", svg: "Scalable Vector Graphics (.svg)", labels: { fileName: "File name", saveAsType: "Save as", page: "Page" } }, okText: "OK", save: "Save", cancel: "Cancel", search: { inputLabel: "Search Text", matchCase: "Match Case", next: "Next Match", previous: "Previous Match", close: "Close", of: "of", dragHandle: "Drag search" } } } }, defaultTools: { pager: { type: "component", name: "pager", overflow: "never", component: "Pager", element: '<div></div>', componentOptions: { navigatable: true, _isToolbarItem: true, } }, spacer: { type: "spacer" }, zoomInOut: { type: "buttonGroup", fillMode: "flat", buttons: [ { type: "button", icon: "zoom-out", name: "zoomOut", command: "ZoomCommand", showText: "overflow", options: "{ \"zoomOut\": true, \"updateComboBox\": true }", fillMode: "flat" }, { type: "button", icon: "zoom-in", name: "zoomIn", command: "ZoomCommand", showText: "overflow", options: "{ \"zoomIn\": true, \"updateComboBox\": true }", fillMode: "flat" }, ] }, zoom: { type: "component", name: "zoom", command: "ZoomCommand", overflow: "never", component: "ComboBox", data: [50, 100,