{"version":3,"file":"kendo.pdfviewer.min.js","names":["global","factory","exports","module","require","define","amd","globalThis","self","kendopdfviewer","js","this","extend","window","kendo","jQuery","pdfviewer","pdfjs","lib","pdfjsLib","isLoaded","console","error","$","undefined$1","PDFJS","Class","atob","PDFJSProcessor","init","options","viewer","file","fetchDocument","that","deferred","Deferred","messages","errorMessages","_isBase64Data","data","getDocument","promise","then","pdf","pageSizes","pagePromises","_downloadData","getData","blob","Blob","type","resolve","i","numPages","push","getPage","Promise","all","map","pagePromise","viewport","getViewport","scale","width","height","total","pages","catch","e","_triggerError","message","parseError","notFoundError","name","includes","alertMessage","notFound","_renderBlankPage","fetchPageData","number","downloadFile","fileName","ui","progress","pageContainer","done","result","reader","FileReader","readAsDataURL","onload","saveAs","dataURI","proxyURL","_updateDocument","loadingTask","destroy","equalSign","length","test","indexOf","renderTextLayer","params","processor","noop","drawing","Group","Surface","RENDER","geometryTypes","Page","DPLPage","PDFJSPage","DPLProcessor","read","upload","download","ajax","url","dataType","success","stringify","JSON","parse","xhr","responseText","page","document","pageField","geometries","location","fromJSON","json","_clearPages","_renderPages","resize","activatePage","dpl","Path","MultiPath","Rect","Image","Text","pageNumber","element","attr","_updatePageSize","ratio","pageElement","Math","min","size","render","draw","group","surface","_drawGeometries","trigger","load","loaded","_initSurface","surfaceOptions","view","kGeometry","geometry","_drawPath","_drawRect","_drawImage","_drawText","append","rectGeo","point","transform","_getMatrix","fill","fillOptions","stroke","strokeOptions","imageRect","src","font","content","path","paths","subPath","segments","moveTo","apply","j","segment","points","lineTo","curveTo","closed","close","matrix","Object","create","Matrix","prototype","canvas","css","get","fn","call","defaultScale","force","_scale","_page","_renderPromise","dpr","devicePixelRatio","context","getContext","_dpr","_renderTask","cancel","canvasContext","_renderTextLayer","textLayer","remove","getTextContent","normalizeWhitespace","textContent","html","container","textDivs","enhanceTextSelection","isArray","Array","SearchDOM","processDom","highlightClass","charClass","targets","target","textNodes","charIndex","text","forEach","traverseToTextNode","processTextNode","node","nodeType","childNodes","span","wrap","parent","empty","splitChars","children","unwrap","newHtml","innerHTML","search","value","matchCase","match","expression","RegExp","matches","resetMark","resetHighlight","resetMatchIndex","exec","startOffset","index","endOffset","highlightAll","mark","start","end","highlight","matchIndex","find","addClass","removeClass","removeAttr","currentIndex","wrapInner","contents","nextMatch","previousMatch","getMarkedIndex","getFirstMarked","eq","each","item","encode","htmlEncode","EXTENSIONS","keys","ErrorDialog","actions","dialogs","okText","_dialog","kendoDialog","getKendoDialog","open","center","ExportAsDialog","fileFormats","description","exportAsDialog","png","extension","svg","title","_initializeDialog","autoFocus","resizable","modal","preventScroll","maxWidth","template","ref","labels","saveAsType","save","_updateModel","pagesCount","viewModel","set","dialogMessages","dialog","kendoWindow","getKendoWindow","observable","defaultFileName","bind","SearchDialog","dragHandle","icon","iconClass","inputLabel","of","previous","next","dialogElm","dialogOffset","top","position","left","Window","minHeight","draggable","activate","ev","sender","searchModel","boundValue","searchText","matchCaseClick","prev","onKeyup","key","keyCode","navigationFn","shiftKey","ENTER","preventDefault","onInput","parseJSON","Command","OpenCommand","_upload","_initUpload","click","uploadOptions","select","_onSelect","_onSuccess","_onError","complete","_onComplete","showFileList","multiple","validation","allowedExtensions","async","saveUrl","autoUpload","saveField","kendoUpload","getKendoUpload","response","isPlainObject","XMLHttpRequest","notSupported","fileToUpload","files","toLowerCase","fromFile","onerror","readAsArrayBuffer","rawFile","PageChangeCommand","current","targetPage","isNaN","_pageNum","Number","DownloadCommand","info","ExportCommand","_saveDialog","_initDialog","exportImage","exportSVG","EnableSelectionCommand","_toggleSelection","EnablePanCommand","OpenSearchCommand","searchDialog","offset","_open","_next","_prev","_close","changeHandler","_change","zoomStartHandler","_closeDialog","openFileHandler","_searchDOM","_initSearchDOM","searchEngine","unbind","_updateSearchModel","toolbar","field","model","_scrollToMark","marked","scroller","_scroller","scrollElement","scrollTo","scrollLeft","ZoomCommand","loadedPagesHeight","containerHeight","clientHeight","updatedVisiblePagesCount","renderTasks","processingLib","_calculateZoom","updateViewer","scrollingStarted","_scrollingStarted","scrollTop","scrollHeight","_resize","zoomScale","pageHeight","_visiblePages","_visiblePagesCount","_loadVisiblePages","_triggerZoomEnd","preventZoom","viewerOptions","visibleCanvas","calculatedDpr","scaleValue","_allowResize","_autoFit","zoomIn","zoomRate","zoomOut","_autoZoomScale","toString","parseInt","replace","zoomMin","zoomMax","updateComboBox","_updateZoomComboBox","PrintCommand","_renderPrintContainer","_loadAllPages","processAfterRender","printContainer","loadPromises","renderPromises","getRenderPromise","_originalScale","zoom","_renderPrintPages","setTimeout","_printDocument","_renderPrintImage","div","img","toDataURL","myWindow","browser","support","write","focus","print","chrome","chromiumEdge","on","popupBlocked","NS","PLUS","MINUS","ZERO","NUMPAD_ZERO","Widget","ERROR","UPDATE","ZOOM_SCALE","PAGE_CHANGE","ZOOMCOMMAND","PROCESSORS","styles","PREDEFINED_ZOOM_VALUES","PDFViewer","deepExtend","_processMessages","_wrapper","_renderToolbar","_initProcessor","_renderPageContainer","_loadDocument","notify","events","pdfjsProcessing","dplProcessing","loadOnDemand","items","defaultPageSize","zoomLevel","actualWidth","autoWidth","fitToWidth","fitToPage","exportAs","pager","first","last","toggleSelection","togglePan","defaultTools","command","spacer","zoomInOut","fillMode","attributes","class","buttons","showText","overflow","component","componentOptions","enable","dataTextField","dataValueField","valuePrimitive","clearOnEscape","commandOn","togglable","selected","spacer2","exportAsTool","pagerTools","rounded","wrapper","_keydown","_resizeHandler","onResize","plusShortcuts","NUMPAD_PLUS","minusShortcuts","NUMPAD_MINUS","zeroShortcuts","shouldExecute","args","ctrlKey","_blankPage","execute","processingOptions","toolbarOptions","tools","_processTools","parentMessages","toolbarElement","appendTo","ToolBar","_toolbarClick","update","_updateToolbar","flatMap","t","zoomLevels","percent","comboOptions","concat","dataSource","p","b","isRtl","direction","rtlDirection","pageOptions","toolbarEl","zoomCombo","toFocus","_getAllItems","isBlank","action","_updatePager","_updateOnBlank","_resetTabIndex","textBox","totalPagesSpan","_togglePagerDisabledClass","prevFirst","closest","nextLast","isPredefined","round","val","_initErrorDialog","_errorDialog","dialogInstance","pagesData","viewerPage","pageData","_attachContainerEvents","_getVisiblePagesCount","clearTimeout","_resizePages","containerWidth","clientWidth","currentRatio","max","_wheel","throttle","activeElement","mobile","Scroller","elastic","_scroll","currentPage","currentPageTop","currentPageHeight","previousPage","prevPageTop","prevPageHeight","containerScrollHeight","containerScrollTop","containerOffsetTop","pageNum","pageIndex","pageToLoadNum","scrollDirection","_prevScrollTop","_preventScroll","abs","floor","originalEvent","wheelDelta","detail","preventComboBoxChange","commandOptions","loadPage","scrollerTopPosition","scrollerTopOffset","pageTopOffset","pageMargin","minVisiblePageNum","maxVisiblePageNum","slice","promises","rootGroup","background","fromRect","color","forceProxy","proxyTarget","setOptions","unbindResize","off","reset","userEvents","_shouldNotMove","toggleClass","_getTextLayers","plugin"],"sources":["kendo.pdfviewer.js"],"mappings":"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","sourcesContent":["(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('kendo.mobile.scroller.js'), require('kendo.toolbar.js'), require('kendo.combobox.js'), require('kendo.textbox.js'), require('kendo.core.js'), require('kendo.drawing.js'), 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.upload.js')) :\n typeof define === 'function' && define.amd ? define(['kendo.mobile.scroller', 'kendo.toolbar', 'kendo.combobox', 'kendo.textbox', 'kendo.core', 'kendo.drawing', 'kendo.dialog', 'kendo.window', 'kendo.binder', 'kendo.numerictextbox', 'kendo.dropdownlist', 'kendo.icons', 'kendo.upload'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, (global.kendopdfviewer = global.kendopdfviewer || {}, global.kendopdfviewer.js = factory()));\n})(this, (function () {\n (function($, undefined$1) {\n var extend = $.extend;\n var isLoaded = function() {\n if (!window.pdfjsLib)\n {\n var console = window.console;\n\n if (console && console.error) {\n console.error(\"PDF.JS required.\");\n }\n\n return false;\n }\n\n kendo.pdfviewer.pdfjs.lib = window.pdfjsLib;\n\n return true;\n };\n\n extend(kendo, {\n pdfviewer: {\n pdfjs: {\n lib: window.pdfjsLib,\n isLoaded: isLoaded\n }\n }\n });\n })(window.kendo.jQuery);\n\n var __meta__$2 = {\n id: \"pdfjs-processor\",\n name: \"PDFJS-Processor\",\n category: \"framework\",\n depends: [ \"core\" ]\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n Class = kendo.Class,\n extend = $.extend,\n atob = window.atob,\n PDFJS;\n\n var PDFJSProcessor = Class.extend({\n init: function(options, viewer) {\n var that = this;\n\n if (kendo.pdfviewer.pdfjs.isLoaded()) {\n PDFJS = kendo.pdfviewer.pdfjs.lib;\n }\n\n that.file = options.file;\n that.viewer = viewer;\n },\n fetchDocument: function() {\n var that = this,\n deferred = $.Deferred(),\n messages = that.viewer.options.messages.errorMessages;\n\n if (!that.file) {\n return deferred.resolve();\n }\n\n if (that._isBase64Data() && atob)\n {\n that.file.data = atob(that.file.data);\n }\n\n PDFJS.getDocument(this.file).promise.then(function(pdf) {\n var pageSizes = [];\n that.pdf = pdf;\n that.pagePromises = [];\n that._downloadData = $.Deferred();\n\n pdf.getData().then(function(data) {\n var blob = new Blob([data], { type: 'application/pdf' });\n that._downloadData.resolve({\n file: blob\n });\n });\n\n for (var i = 1; i <= pdf.numPages; i++) {\n that.pagePromises.push(pdf.getPage(i));\n }\n\n Promise.all(that.pagePromises).then(function(pagePromises) {\n pageSizes = pagePromises.map(function(pagePromise) {\n var viewport = pagePromise.getViewport({ scale: 4 / 3 });\n return {\n width: viewport.width,\n height: viewport.height\n };\n });\n\n deferred.resolve({\n total: pdf.numPages,\n pages: pageSizes\n });\n }).catch(function(e) {\n that.viewer._triggerError({\n error: e.message,\n message: messages.parseError\n });\n });\n\n }).catch(function(e) {\n var notFoundError = e.name.includes(\"Missing\");\n var alertMessage = notFoundError ? messages.notFound : messages.parseError;\n that.viewer._triggerError({\n error: e.message,\n message: alertMessage\n });\n if (notFoundError) {\n that.viewer._renderBlankPage();\n }\n });\n\n return deferred;\n },\n fetchPageData: function(number) {\n return this.pagePromises[number - 1];\n },\n downloadFile: function(fileName) {\n var that = this;\n kendo.ui.progress(that.viewer.pageContainer, true);\n\n that._downloadData.done(function(result) {\n kendo.ui.progress(that.viewer.pageContainer, false);\n\n var reader = new FileReader();\n reader.readAsDataURL(result.file);\n\n reader.onload = function() {\n kendo.saveAs({\n dataURI: reader.result,\n fileName: fileName + \".pdf\",\n proxyURL: function() {\n return reader.result;\n }\n });\n };\n });\n },\n _updateDocument: function(file) {\n if (this.pdf && this.pdf.loadingTask) {\n this.pdf.loadingTask.destroy();\n }\n\n this.file = file;\n },\n _isBase64Data: function() {\n var data = this.file.data,\n notBase64 = /[^A-Z0-9+\\/=]/i,\n length = data && data.length,\n equalSign;\n\n if (!length || length % 4 !== 0 || notBase64.test(data)) {\n return false;\n }\n\n equalSign = data.indexOf('=');\n\n return equalSign === -1 ||\n equalSign === length - 1 ||\n (equalSign === length - 2 && data[length - 1] === '=');\n },\n renderTextLayer: function(params) {\n PDFJS.renderTextLayer(params);\n }\n });\n\n extend(kendo.pdfviewer.pdfjs, {\n processor: PDFJSProcessor\n });\n })(window.kendo.jQuery);\n\n var __meta__$1 = {\n id: \"dpl-processor\",\n name: \"DPL-Processor\",\n category: \"framework\",\n depends: [ \"core\" ]\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n extend = $.extend,\n Class = kendo.Class;\n\n var DPLProcessor = Class.extend({\n init: function(options, viewer) {\n var that = this;\n\n that.options = options;\n that.read = options.read;\n that.upload = options.upload;\n that.download = options.download;\n\n that.viewer = viewer;\n },\n fetchDocument: function() {\n var that = this,\n deferred = $.Deferred(),\n errorMessages = that.viewer.options.messages.errorMessages;\n\n if (!that.read) {\n return deferred.resolve();\n }\n\n $.ajax({\n type: that.read.type,\n url: that.read.url,\n dataType: that.read.dataType,\n success: function(data) {\n if (typeof data != \"string\") {\n data = kendo.stringify(data);\n }\n deferred.resolve(JSON.parse(data));\n },\n error: function(xhr) {\n that.viewer._triggerError({\n error: xhr.responseText,\n message: errorMessages.parseError\n });\n }\n });\n\n return deferred;\n },\n fetchPageData: function(number) {\n var that = this;\n var deferred = $.Deferred();\n var page = that.viewer.document.pages[number - 1];\n var data = {};\n data[that.read.pageField] = number;\n\n if (!page.geometries.length) {\n $.ajax({\n type: that.read.type,\n url: that.read.url,\n data: data,\n success: function(data) {\n deferred.resolve(JSON.parse(data));\n },\n error: function(xhr) {\n that.viewer._triggerError({\n error: xhr.responseText,\n message: that.viewer.options.messages.errorMessages.parseError\n });\n }\n });\n } else {\n deferred.resolve(page);\n }\n\n return deferred;\n },\n downloadFile: function(fileName) {\n window.location = this.download.url + \"?file=\" + fileName;\n },\n\n fromJSON: function(json)\n {\n var viewer = this.viewer;\n viewer._clearPages();\n\n viewer.document = json;\n viewer.document.total = viewer.document.pages.length;\n\n viewer._renderPages();\n viewer.resize(true);\n\n viewer.activatePage(1);\n }\n });\n\n extend(kendo.pdfviewer, {\n dpl: {\n processor: DPLProcessor\n }\n });\n })(window.kendo.jQuery);\n\n (function($, undefined$1) {\n var extend = $.extend,\n noop = $.noop,\n drawing = kendo.drawing,\n Group = drawing.Group,\n Surface = drawing.Surface,\n RENDER = \"render\",\n Class = kendo.Class,\n\n DEFAULT_DPR = 2;\n\n var geometryTypes = {\n Path: \"path\",\n MultiPath: \"multipath\",\n Rect: \"rect\",\n Image: \"image\",\n Text: \"text\"\n };\n\n var Page = Class.extend({\n init: function(options, viewer) {\n this.viewer = viewer;\n this.processor = options.processor;\n this.options = options;\n this.pageNumber = options.number;\n\n this.element = $(\"
\");\n this.element.attr(kendo.attr(\"number\"), this.pageNumber);\n\n this._updatePageSize(options);\n this.width = options.width;\n this.height = options.height;\n },\n resize: function(ratio) {\n var pageElement = this.element;\n\n this._updatePageSize({\n width: Math.min(pageElement.width() * ratio, this.width),\n height: Math.min(pageElement.height() * ratio, this.height)\n });\n },\n _updatePageSize: function(size) {\n this.element\n .width(size.width)\n .height(size.height);\n },\n destroy: function() {\n kendo.destroy(this.element);\n },\n render: noop\n });\n\n var DPLPage = Page.extend({\n draw: function() {\n var that = this,\n geometries = that.options.geometries;\n\n that.group = new Group();\n that.surface.draw(that.group);\n\n that._drawGeometries(geometries);\n\n that.viewer.trigger(RENDER, { page: this });\n kendo.ui.progress(that.element, false);\n },\n load: function() {\n var that = this;\n\n if (that.loaded || !that.processor)\n {\n return;\n }\n\n that.processor.fetchPageData(that.pageNumber).then(function(data) {\n that.options = data;\n that._initSurface();\n that.draw();\n });\n\n that.loaded = true;\n },\n _initSurface: function() {\n var size = {\n width: this.element.width(),\n height: this.element.height()\n };\n var surfaceOptions = extend({ width: this.width, height: this.height }, this.viewer.options.view);\n this.surface = new Surface(this.element, surfaceOptions);\n this._updatePageSize(size);\n },\n _drawGeometries: function(geometries) {\n var that = this,\n kGeometry;\n\n if (!geometries) {\n return;\n }\n\n for (var i = 0; i <= geometries.length; i++) {\n var geometry = geometries[i];\n\n if (!geometry) {\n continue;\n }\n\n switch (geometry.type) {\n case geometryTypes.Path:\n case geometryTypes.MultiPath:\n kGeometry = that._drawPath(geometry);\n break;\n case geometryTypes.Rect:\n kGeometry = that._drawRect(geometry);\n break;\n case geometryTypes.Image:\n kGeometry = that._drawImage(geometry);\n break;\n case geometryTypes.Text:\n kGeometry = that._drawText(geometry);\n break;\n default:\n kGeometry = null;\n break;\n }\n\n if (kGeometry)\n {\n that.group.append(kGeometry);\n }\n }\n },\n _drawRect: function(geometry)\n {\n var rectGeo = new kendo.geometry.Rect(geometry.point, geometry.size);\n\n return new drawing.Rect(rectGeo, {\n transform: this._getMatrix(geometry.transform),\n fill: geometry.fillOptions,\n stroke: geometry.strokeOptions\n });\n },\n\n _drawImage: function(geometry)\n {\n var imageRect = new kendo.geometry.Rect(geometry.point, geometry.size);\n return new drawing.Image(geometry.src, imageRect, {\n transform: this._getMatrix(geometry.transform)\n });\n },\n\n _drawText: function(geometry)\n {\n var options = {\n transform: this._getMatrix(geometry.transform),\n stroke: geometry.strokeOptions,\n fill: geometry.fillOptions,\n font: geometry.font\n };\n return new kendo.drawing.Text(geometry.content, geometry.point, options);\n },\n\n _drawPath: function(geometry)\n {\n var options = {\n transform: this._getMatrix(geometry.transform),\n stroke: geometry.strokeOptions,\n fill: geometry.fillOptions\n };\n var path = new drawing.MultiPath(options);\n\n for (var i = 0; i < geometry.paths.length; i++) {\n var subPath = geometry.paths[i];\n\n if (!subPath.segments)\n {\n return;\n }\n\n path.moveTo.apply(path, subPath.point);\n\n for (var j = 0; j < subPath.segments.length; j++) {\n var segment = subPath.segments[j];\n var drawAction = segment.points.length === 1 ? path.lineTo : path.curveTo;\n drawAction.apply(path, segment.points);\n }\n\n if (subPath.closed) {\n path.close();\n }\n }\n\n return path;\n },\n\n _getMatrix: function(transform) {\n var matrix = Object.create(kendo.geometry.Matrix.prototype);\n kendo.geometry.Matrix.apply(matrix, transform);\n return matrix;\n }\n });\n\n var PDFJSPage = Page.extend({\n init: function(options, viewer) {\n var that = this,\n canvas;\n\n canvas = $(\"\").css({\n width: \"100%\",\n height: \"100%\"\n });\n that.canvas = canvas.get(0);\n\n Page.fn.init.call(that, options, viewer);\n that.canvas.width = that.width;\n that.canvas.height = that.height;\n\n that.element.append(canvas);\n },\n load: function(defaultScale, force) {\n var that = this,\n promise = $.Deferred();\n\n if (that._scale === defaultScale && !force)\n {\n return;\n } else if (that._scale && that._scale !== defaultScale && !force)\n {\n that._scale = defaultScale;\n that.render(defaultScale);\n return promise.resolve(that);\n }\n\n if (that.processor) {\n that.processor.fetchPageData(that.pageNumber).then(function(page) {\n that._page = page;\n that._renderPromise = that.render(defaultScale).then(function() {\n that.viewer.trigger(RENDER, { page: that });\n });\n promise.resolve(that);\n });\n }\n\n that._scale = defaultScale;\n that.loaded = true;\n return promise;\n },\n render: function(scale) {\n var that = this;\n var dpr = window.devicePixelRatio >= DEFAULT_DPR ? window.devicePixelRatio : DEFAULT_DPR;\n var context = this.canvas.getContext('2d'),\n viewport = this._page.getViewport({\n scale: scale\n });\n\n this.canvas.width = viewport.width * dpr;\n this.canvas.height = viewport.height * dpr;\n context.scale(dpr, dpr);\n\n this._scale = scale;\n this._dpr = dpr;\n\n if (this._renderTask)\n {\n this._renderTask.cancel();\n this._renderTask = null;\n }\n\n this._updatePageSize({\n width: viewport.width,\n height: viewport.height\n });\n\n this._renderTask = this._page.render({\n canvasContext: context,\n viewport: viewport\n });\n\n this._renderTextLayer(viewport);\n\n return this._renderTask.promise.then(function() {\n that._renderTask = null;\n\n }).catch(function() {});\n },\n _renderTextLayer: function(viewport) {\n var that = this;\n var page = that._page;\n\n if (that.textLayer) {\n that.textLayer.remove();\n }\n\n that.textLayer = $(\"
\").get(0);\n that.element.append(that.textLayer);\n\n page.getTextContent({\n normalizeWhitespace: true\n }).then(function(textContent) {\n $(that.textLayer).css({\n height: viewport.height,\n width: viewport.width\n }).html(\"\"); // Clear content to make sure that refreshing the page will not cause duplication of the text content.\n\n var params = {\n textContent: textContent,\n container: that.textLayer,\n viewport: viewport,\n textDivs: [],\n enhanceTextSelection: true\n };\n\n that.processor.renderTextLayer(params);\n });\n }\n });\n\n extend(kendo.pdfviewer.dpl, {\n geometryTypes: geometryTypes,\n Page: DPLPage\n });\n extend(kendo.pdfviewer.pdfjs, {\n Page: PDFJSPage\n });\n })(window.kendo.jQuery);\n\n (function($, undefined$1) {\n var Class = kendo.Class,\n extend = $.extend,\n isArray = Array.isArray;\n\n var SearchDOM = Class.extend({\n init: function(options) {\n var that = this;\n\n that.options = extend({}, that.options, options);\n\n that.processDom();\n },\n\n options: {\n highlightClass: \"k-search-highlight\",\n charClass: \"k-text-char\"\n },\n\n processDom: function() {\n var that = this;\n\n that.targets = isArray(that.options.target) ? that.options.target : [that.options.target];\n that.textNodes = [];\n that.charIndex = 0;\n that.text = \"\";\n\n that.targets.forEach(function(target) {\n that.traverseToTextNode(target);\n });\n\n for (var i = 0; i < that.textNodes.length; i++) {\n that.processTextNode(that.textNodes[i]);\n }\n },\n\n traverseToTextNode: function(node) {\n var that = this;\n\n if (node.nodeType === 3) {\n that.textNodes.push(node);\n } else {\n for (var i = 0; i < node.childNodes.length; i++) {\n that.traverseToTextNode(node.childNodes[i]);\n }\n }\n },\n\n processTextNode: function(node) {\n var that = this;\n var text = node.textContent;\n var span;\n\n that.text = that.text + text;\n\n if (text.length > 0) {\n span = $(node).wrap(\"\").parent();\n span.empty();\n that.splitChars(span.get(0), text);\n span.children().unwrap();\n }\n },\n\n splitChars: function(span, text) {\n var that = this;\n var newHtml = \"\";\n\n for (var i = 0; i < text.length; i++) {\n newHtml = newHtml + \"\" + text[i] + \"\";\n that.charIndex++;\n }\n\n span.innerHTML = newHtml;\n },\n\n search: function(value, matchCase) {\n var that = this;\n var expression = new RegExp(value, !matchCase ? \"gi\" : \"g\");\n var match;\n\n that.matches = [];\n\n that.resetMark();\n that.resetHighlight();\n that.resetMatchIndex();\n\n if (value === \"\") {\n return;\n }\n\n match = expression.exec(that.text);\n\n while (match) {\n that.matches.push({\n startOffset: match.index,\n endOffset: match.index + match[0].length\n });\n\n match = expression.exec(that.text);\n }\n\n that.highlightAll();\n that.mark();\n },\n\n highlightAll: function() {\n var that = this;\n\n that.matches.forEach(function(match, index) {\n var start = match.startOffset;\n var end = match.endOffset;\n\n that.highlight(start, end, index + 1);\n });\n },\n\n highlight: function(start, end, matchIndex) {\n var that = this;\n\n for (var i = start; i < end; i++) {\n $(that.targets)\n .find(\".\" + that.options.charClass + \"[\" + kendo.attr(\"char-index\") + \"=\" + i + \"]\")\n .addClass(that.options.highlightClass)\n .attr(kendo.attr(\"match-index\"), matchIndex);\n }\n },\n\n resetHighlight: function() {\n var that = this;\n\n $(that.targets)\n .find(\".\" + that.options.highlightClass)\n .removeClass(that.options.highlightClass);\n },\n\n resetMatchIndex: function() {\n var that = this;\n\n $(that.targets)\n .find(\".\" + that.options.charClass + \"[\" + kendo.attr(\"match-index\") + \"]\")\n .removeAttr(kendo.attr(\"match-index\"));\n },\n\n mark: function() {\n var that = this;\n\n if (!that.currentIndex && that.currentIndex !== 0) {\n that.currentIndex = 0;\n } else if (that.currentIndex > that.matches.length) {\n that.currentIndex = that.matches.length;\n } else {\n that.resetMark();\n }\n\n $(that.targets)\n .find(\".\" + that.options.charClass + \"[\" + kendo.attr(\"match-index\") + \"=\" + that.currentIndex + \"]\")\n .wrapInner(\"\");\n },\n\n resetMark: function() {\n var that = this;\n $(that.targets).find(\"mark\").contents().unwrap();\n },\n\n nextMatch: function() {\n var that = this;\n\n that.currentIndex++;\n\n if (that.currentIndex > that.matches.length) {\n that.currentIndex = 1;\n }\n\n that.mark();\n },\n\n previousMatch: function() {\n var that = this;\n\n that.currentIndex--;\n\n if (that.currentIndex < 1) {\n that.currentIndex = that.matches.length;\n }\n\n that.mark();\n },\n\n getMarkedIndex: function() {\n return this.matches.length ? this.currentIndex : 0;\n },\n\n getFirstMarked: function() {\n return $(this.targets).find(\"mark\").eq(0);\n },\n\n destroy: function() {\n var that = this;\n\n that.resetMark();\n $(that.targets).children(\"span:not(.\" + that.options.charClass + \")\").each(function(i, item) {\n $(item).text($(item).text());\n });\n }\n });\n\n extend(kendo.pdfviewer, {\n SearchDOM: SearchDOM\n });\n })(window.kendo.jQuery);\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n encode = kendo.htmlEncode,\n extend = $.extend,\n Class = kendo.Class,\n EXTENSIONS = {\n svg: \".svg\",\n png: \".png\"\n },\n keys = kendo.keys;\n\n var ErrorDialog = Class.extend({\n init: function(options) {\n this.options = extend(options, {\n actions: [{\n text: options.messages.dialogs.okText\n }]\n });\n this._dialog = $(\"
\")\n .kendoDialog(this.options)\n .getKendoDialog();\n },\n open: function() {\n this._dialog.center().open();\n }\n });\n\n var ExportAsDialog = Class.extend({\n init: function(options) {\n this.options = extend(options, this.options, {\n fileFormats: [{\n description: options.messages.dialogs.exportAsDialog.png,\n extension: EXTENSIONS.png\n }, {\n description: options.messages.dialogs.exportAsDialog.svg,\n extension: EXTENSIONS.svg\n }],\n title: options.messages.dialogs.exportAsDialog.title,\n open: function() {\n this.center();\n }\n });\n this._initializeDialog();\n return this;\n },\n options: {\n extension: EXTENSIONS.png,\n autoFocus: true,\n resizable: false,\n modal: {\n preventScroll: true\n },\n width: \"90%\",\n maxWidth: 520,\n template: function (ref) {\n var messages = ref.messages;\n var total = ref.total;\n\n return \"
\" +\n \"
\" +\n \"\" +\n \"
\" +\n \"
\" +\n \"
\" +\n \"
\" +\n \"\" +\n \"
\" +\n \"
\" +\n \"
\" +\n \"
\" +\n \"\" +\n \"
\" +\n \"
\" +\n \"\" +\n \"\" +\n \"
\";\n }\n },\n _updateModel: function(options) {\n if (options.pagesCount) {\n this.viewModel.set(\"pagesCount\", options.pagesCount);\n }\n if (options.page) {\n this.viewModel.set(\"page\", options.page);\n }\n },\n _initializeDialog: function() {\n var that = this;\n var options = that.options;\n var dialogMessages = options.messages.dialogs;\n var dialog = $(\"
\")\n .append(kendo.template(options.template)({\n total: options.pagesCount,\n messages: dialogMessages\n }))\n .kendoWindow(options)\n .getKendoWindow();\n\n that.viewModel = kendo.observable({\n title: dialogMessages.exportAsDialog.title,\n name: dialogMessages.exportAsDialog.defaultFileName,\n extension: options.extension,\n fileFormats: options.fileFormats,\n pagesCount: options.pagesCount,\n page: 1,\n apply: that.apply.bind(this),\n close: function() {\n dialog.close();\n }\n });\n\n that._dialog = dialog;\n\n kendo.bind(dialog.element, that.viewModel);\n return dialog;\n },\n open: function() {\n this._dialog.center().open();\n },\n apply: function() {\n this._dialog.close();\n this.options.apply({\n fileName: this.viewModel.name + this.viewModel.extension,\n extension: this.viewModel.extension,\n page: this.viewModel.page\n });\n }\n });\n\n var SearchDialog = Class.extend({\n init: function(options) {\n var that = this;\n that.options = extend({}, options, that.options);\n },\n options: {\n resizable: false,\n template: function (ref) {\n var messages = ref.messages;\n\n return \"
\" +\n \"\" +\n \"\" +\n \"\" +\n \"\" +\n \"\" +\n \" \" + (encode(messages.of)) + \" \" +\n \"\" +\n \"\" +\n \"\" +\n \"
\";\n }\n },\n open: function() {\n var that = this;\n\n if (!that.dialog) {\n that._initializeDialog();\n }\n\n that.dialog.open();\n },\n _initializeDialog: function() {\n var that = this;\n var template = kendo.template(that.options.template);\n var dialogElm = $(\"
\").append(template({\n messages: that.options.messages\n }));\n var dialogOffset = {\n top: that.options.position.top + 16,\n left: that.options.position.left + 16\n };\n\n that.dialog = new kendo.ui.Window(dialogElm, extend({}, that.options, {\n autoFocus: false,\n title: false,\n position: { top: dialogOffset.top, left: dialogOffset.left },\n minHeight: 30,\n draggable: {\n dragHandle: \".k-search-dialog-draghandle\"\n },\n activate: function(ev) {\n ev.sender.element.find(\".k-search-dialog-input\").trigger(\"focus\");\n }\n }));\n\n that.searchModel = kendo.observable({\n boundValue: \"\",\n searchText: \"\",\n matchCase: false,\n matchIndex: 0,\n matches: 0,\n matchCaseClick: function() {\n this.set(\"matchCase\", !this.matchCase);\n },\n next: that.options.next,\n prev: that.options.prev,\n close: function() {\n this.set(\"boundValue\", \"\");\n that.dialog.close();\n },\n onKeyup: function(ev) {\n var key = ev.keyCode;\n var navigationFn = ev.shiftKey ? this.prev : this.next;\n\n if (key === keys.ENTER) {\n navigationFn();\n ev.preventDefault();\n }\n },\n onInput: function(ev) {\n this.set(\"searchText\", ev.target.value);\n }\n });\n\n kendo.bind(that.dialog.element, that.searchModel);\n }\n });\n\n extend(kendo.pdfviewer, {\n dialogs: {\n ErrorDialog: ErrorDialog,\n ExportAsDialog: ExportAsDialog,\n SearchDialog: SearchDialog\n }\n });\n })(window.kendo.jQuery);\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n extend = $.extend,\n parseJSON = JSON.parse,\n progress = kendo.ui.progress,\n Class = kendo.Class,\n OPEN = \"open\",\n ZOOMSTART = \"zoomStart\",\n ZOOMEND = \"zoomEnd\";\n\n var Command = Class.extend({\n init: function(options) {\n this.options = options;\n this.viewer = options.viewer;\n this.errorMessages = this.viewer.options.messages.errorMessages;\n }\n });\n\n var OpenCommand = Command.extend({\n init: function(options) {\n Command.fn.init.call(this, options);\n this.upload = this.viewer.processor.upload;\n },\n exec: function() {\n (this.viewer._upload || this._initUpload()).element.click();\n },\n _initUpload: function() {\n var uploadOptions = {\n select: this._onSelect.bind(this),\n success: this._onSuccess.bind(this),\n error: this._onError.bind(this),\n complete: this._onComplete.bind(this),\n showFileList: false,\n multiple: false,\n validation: {\n allowedExtensions: [\".pdf\"]\n }\n };\n\n if (this.upload) {\n extend(uploadOptions, {\n async: {\n saveUrl: this.upload.url,\n autoUpload: true,\n saveField: this.upload.saveField\n }\n });\n }\n\n var upload = $('').kendoUpload(uploadOptions).getKendoUpload();\n this.viewer._upload = upload;\n\n return upload;\n },\n _onComplete: function() {\n progress(this.viewer.pageContainer, false);\n },\n _onSuccess: function(e) {\n var json = parseJSON(e.response);\n\n if ($.isPlainObject(json)) {\n this.viewer.processor.fromJSON(json);\n }\n else {\n this.viewer._triggerError({\n error: json,\n message: this.errorMessages.parseError\n });\n }\n },\n _onError: function(e) {\n this.viewer._triggerError({\n error: e.XMLHttpRequest.responseText,\n message: this.errorMessages.notSupported\n });\n },\n _onSelect: function(e) {\n var that = this;\n var fileToUpload = e.files[0];\n\n progress(that.viewer.pageContainer, true);\n\n if (that.viewer.trigger(OPEN, { file: fileToUpload }) || that.upload) {\n return;\n } else if (fileToUpload.extension.toLowerCase() !== \".pdf\") {\n that.viewer._triggerError({\n error: fileToUpload,\n message: that.errorMessages.notSupported\n });\n return;\n }\n\n var reader = new FileReader();\n reader.onload = function(e) {\n var document = e.target.result;\n that.viewer.fromFile(document);\n };\n reader.onerror = function() {\n that.viewer._triggerError({\n error: fileToUpload,\n message: that.errorMessages.parseError\n });\n };\n\n reader.readAsArrayBuffer(fileToUpload.rawFile);\n }\n });\n\n var PageChangeCommand = Command.extend({\n exec: function() {\n var targetPage = this.options.value,\n viewer = this.viewer,\n current, total;\n\n if (isNaN(targetPage)) {\n current = viewer._pageNum;\n total = viewer.document.total;\n\n switch (targetPage) {\n case \"first\": targetPage = 1;\n break;\n case \"prev\": targetPage = current > 1 ? current - 1 : 1;\n break;\n case \"next\": targetPage = current < total ? current + 1 : total;\n break;\n case \"last\": targetPage = total;\n break;\n }\n } else {\n targetPage = Number(targetPage);\n }\n\n viewer.activatePage(targetPage);\n }\n });\n\n var DownloadCommand = Command.extend({\n exec: function() {\n if (!this.viewer.document) {\n this.viewer._triggerError({\n message: this.errorMessages.notFound\n });\n return;\n }\n\n var fileName = (this.viewer.document.info && this.viewer.document.info.title) ||\n this.viewer.options.messages.defaultFileName;\n\n this.viewer.processor.downloadFile(fileName);\n }\n });\n\n var ExportCommand = Command.extend({\n init: function(options) {\n options = $.extend(options, this.options);\n Command.fn.init.call(this, options);\n },\n exec: function() {\n var dialog = (this.viewer._saveDialog || this._initDialog());\n\n dialog._updateModel({\n pagesCount: (this.viewer.document && this.viewer.document.total) || 1,\n page: this.viewer.options.page\n });\n\n dialog.open();\n },\n apply: function(viewModel) {\n var extension = viewModel.extension;\n\n if (extension === \".png\") {\n this.viewer.exportImage(viewModel);\n } else if (extension === \".svg\") {\n this.viewer.exportSVG(viewModel);\n }\n },\n _initDialog: function() {\n this.viewer._saveDialog = new kendo.pdfviewer.dialogs.ExportAsDialog({\n apply: this.apply.bind(this),\n pagesCount: (this.viewer.document && this.viewer.document.total) || 1,\n messages: this.viewer.options.messages\n });\n return this.viewer._saveDialog;\n }\n });\n\n var EnableSelectionCommand = Command.extend({\n exec: function() {\n var that = this,\n viewer = that.viewer;\n\n viewer._toggleSelection(true);\n }\n });\n\n var EnablePanCommand = Command.extend({\n exec: function() {\n var that = this,\n viewer = that.viewer;\n\n viewer._toggleSelection(false);\n }\n });\n\n var OpenSearchCommand = Command.extend({\n init: function(options) {\n var that = this;\n\n that.viewer = options.viewer;\n\n if (!that.viewer.searchDialog) {\n that.viewer.searchDialog = new kendo.pdfviewer.dialogs.SearchDialog({\n position: {\n top: that.viewer.pageContainer.offset().top,\n left: that.viewer.pageContainer.offset().left\n },\n messages: that.viewer.options.messages.dialogs.search,\n open: that._open.bind(that),\n next: that._next.bind(that),\n prev: that._prev.bind(that),\n close: that._close.bind(that)\n });\n }\n\n Command.fn.init.call(that, options);\n },\n exec: function() {\n var that = this;\n\n that.viewer.searchDialog.open();\n },\n _open: function() {\n var that = this;\n\n that.changeHandler = that._change.bind(that);\n that.zoomStartHandler = that._closeDialog.bind(that);\n that.openFileHandler = that._closeDialog.bind(that);\n\n if (!that.viewer._searchDOM) {\n that.viewer._initSearchDOM();\n that.viewer.searchDialog.searchModel.bind(\"change\", that.changeHandler);\n that.viewer.bind(\"zoomStart\", that.zoomStartHandler);\n that.viewer.bind(\"open\", that.openFileHandler);\n }\n },\n _close: function() {\n var that = this;\n var searchEngine = that.viewer._searchDOM;\n\n that.viewer.searchDialog.searchModel.unbind(\"change\", that.changeHandler);\n that.viewer.unbind(\"zoomStart\", that.zoomStartHandler);\n that.viewer.unbind(\"open\", that.openFileHandler);\n searchEngine.destroy();\n delete that.viewer._searchDOM;\n that._updateSearchModel();\n that.viewer.toolbar.element.find(\"[tabindex=0]\").trigger(\"focus\");\n },\n _change: function(ev) {\n var that = this;\n var searchEngine = that.viewer._searchDOM;\n var field = ev.field;\n var model = that.viewer.searchDialog.searchModel;\n var value = model[field];\n\n if (!searchEngine) {\n return;\n }\n\n switch (field) {\n case \"searchText\":\n searchEngine.search(value, model.matchCase);\n that._updateSearchModel();\n break;\n case \"matchCase\":\n searchEngine.search(model.searchText, value);\n that._updateSearchModel();\n break;\n default:\n break;\n }\n },\n _next: function() {\n var that = this;\n var searchEngine = that.viewer._searchDOM;\n\n if (searchEngine.matches && searchEngine.matches.length) {\n searchEngine.nextMatch();\n that._updateSearchModel();\n }\n },\n _prev: function() {\n var that = this;\n var searchEngine = that.viewer._searchDOM;\n\n if (searchEngine.matches && searchEngine.matches.length) {\n searchEngine.previousMatch();\n that._updateSearchModel();\n }\n },\n _updateSearchModel: function() {\n var that = this;\n var searchEngine = that.viewer._searchDOM;\n var model = that.viewer.searchDialog.searchModel;\n\n if (searchEngine) {\n model.set(\"matches\", searchEngine.matches.length);\n model.set(\"matchIndex\", searchEngine.getMarkedIndex());\n that._scrollToMark();\n } else {\n model.set(\"searchText\", \"\");\n model.set(\"matches\", 0);\n model.set(\"matchIndex\", 0);\n model.set(\"matchCase\", false);\n }\n },\n _scrollToMark: function() {\n var that = this;\n var searchEngine = that.viewer._searchDOM;\n var marked = searchEngine.getFirstMarked();\n var scroller = that.viewer._scroller;\n var position;\n\n if (!marked.length) {\n return;\n }\n\n position = marked.offset().top - scroller.scrollElement.offset().top - 100;\n\n scroller.scrollTo(scroller.scrollLeft, position * -1);\n },\n _closeDialog: function() {\n var that = this;\n that.viewer.searchDialog.dialog.close();\n }\n });\n\n var ZoomCommand = Command.extend({\n exec: function() {\n var that = this,\n options = that.options,\n viewer = that.viewer,\n scale = options.value || options.scale,\n loadedPagesHeight = 0,\n page = that.viewer._pageNum,\n containerHeight = viewer.pageContainer[0].clientHeight,\n updatedVisiblePagesCount = 1,\n renderTasks = [];\n\n if (viewer.processingLib === \"dpl\") {\n return;\n }\n\n scale = that._calculateZoom();\n\n var updateViewer = function() {\n var scroller = that.viewer._scroller,\n scrollingStarted = viewer._scrollingStarted;\n\n if (scroller && scroller.scrollTop > scroller.scrollHeight()) {\n scroller._resize();\n }\n\n if (!scrollingStarted)\n {\n viewer.activatePage(page);\n viewer._scrollingStarted = false;\n }\n };\n\n if (!scale) {\n return;\n }\n\n viewer.zoomScale = scale;\n viewer._scrollingStarted = false;\n\n if (viewer.pages) {\n viewer.pages.forEach(function(page) {\n var pageHeight;\n\n if (viewer._visiblePages.indexOf(page) !== -1 && page.loaded) {\n renderTasks.push(page.render(scale));\n\n pageHeight = page._page.getViewport({\n scale: scale\n }).height;\n }\n else {\n page.resize(scale);\n pageHeight = page.element.height();\n }\n\n loadedPagesHeight += pageHeight;\n\n if (loadedPagesHeight <= containerHeight) {\n updatedVisiblePagesCount++;\n }\n });\n\n\n if (viewer._visiblePagesCount != updatedVisiblePagesCount) {\n\n viewer._visiblePagesCount = updatedVisiblePagesCount;\n viewer._loadVisiblePages();\n }\n }\n\n Promise.all(renderTasks).then(function() {\n updateViewer();\n that._triggerZoomEnd(scale);\n }).catch(function() {\n updateViewer();\n that._triggerZoomEnd(scale);\n });\n },\n\n _calculateZoom: function() {\n var options = this.options,\n viewer = this.viewer,\n viewerOptions = viewer.options,\n pageContainer = viewer.pageContainer,\n visibleCanvas = viewer._visiblePages && viewer._visiblePages[0].canvas,\n calculatedDpr = (viewer._visiblePages && viewer._visiblePages[0]._dpr) || 2,\n scale = options.value || options.scale,\n scaleValue = scale,\n preventZoom;\n\n viewer._allowResize = false;\n viewer._autoFit = false;\n\n if (options.zoomIn) {\n scaleValue = scale = viewer.zoomScale + viewerOptions.zoomRate;\n } else if (options.zoomOut) {\n scaleValue = scale = viewer.zoomScale - viewerOptions.zoomRate;\n } else if (scale === \"auto\") {\n viewer._allowResize = true;\n scaleValue = viewer._autoZoomScale;\n } else if (scale === \"actual\") {\n scaleValue = 1;\n } else if (scale === \"fitToWidth\") {\n viewer._allowResize = true;\n viewer._autoFit = \"fitToWidth\";\n scaleValue = (pageContainer.width() / ((visibleCanvas.width / calculatedDpr) / viewer.zoomScale));\n } else if (scale === \"fitToPage\") {\n viewer._allowResize = true;\n viewer._autoFit = \"fitToPage\";\n scaleValue = (pageContainer.height() / ((visibleCanvas.height / calculatedDpr) / viewer.zoomScale));\n } else if (scale && scale.toString().match(/^[0-9]+%?$/)) {\n scale = parseInt(scale.replace('%', ''), 10) / 100;\n scaleValue = scale;\n } else {\n preventZoom = isNaN(scale);\n }\n\n if (!preventZoom) {\n preventZoom = scale < viewerOptions.zoomMin || scale > viewerOptions.zoomMax;\n }\n\n if (preventZoom || viewer.trigger(ZOOMSTART, { scale: scale })) {\n return;\n }\n\n if (options.updateComboBox && viewer.toolbar)\n {\n viewer._updateZoomComboBox(scale);\n }\n\n return scaleValue;\n },\n\n _triggerZoomEnd: function(scale) {\n var that = this,\n viewer = that.viewer;\n\n viewer.trigger(ZOOMEND, { scale: scale });\n }\n });\n\n var PrintCommand = Command.extend({\n init: function(options) {\n Command.fn.init.call(this, options);\n },\n exec: function() {\n var that = this;\n\n if (!that.viewer.document) {\n that.viewer._triggerError({\n message: this.errorMessages.notFound\n });\n return;\n }\n\n progress(that.viewer.pageContainer, true);\n that._renderPrintContainer();\n that._loadAllPages().then(that.processAfterRender.bind(that));\n },\n _renderPrintContainer: function() {\n this.printContainer = $(\"
\");\n },\n _loadAllPages: function() {\n var that = this;\n var pages = that.viewer.pages;\n var loadPromises = [];\n var renderPromises = [];\n var promise = $.Deferred();\n\n that._originalScale = that.viewer.zoom();\n\n function getRenderPromise(page) {\n renderPromises.push(page._renderPromise);\n }\n\n for (var i = 0; i < pages.length; i++) {\n loadPromises.push(pages[i].load(3, true).then(getRenderPromise));\n }\n\n Promise.all(loadPromises).then(function() {\n promise.resolve(renderPromises);\n });\n\n return promise;\n },\n processAfterRender: function(renderPromises) {\n var that = this;\n\n Promise.all(renderPromises).then(function() {\n that._renderPrintPages();\n setTimeout(function() {\n that._printDocument();\n that.viewer.zoom(that._originalScale);\n progress(that.viewer.pageContainer, false);\n delete that._originalScale;\n }, 0);\n });\n },\n _renderPrintPages: function() {\n var pages = this.viewer.pages;\n\n for (var i = 0; i < pages.length; i++) {\n this._renderPrintImage(pages[i]);\n }\n },\n _renderPrintImage: function(page) {\n var canvas = page.canvas;\n var div = $(\"
\");\n\n var img = \"\";\n\n div.append(img);\n\n this.printContainer.append(div);\n },\n _printDocument: function() {\n var that = this;\n var pages = that.viewer.pages;\n var width = pages[0].width;\n var height = pages[0].height;\n var myWindow = window.open('','','innerWidth=' + width + ',innerHeight=' + height + 'location=no,titlebar=no,toolbar=no');\n var browser = kendo.support.browser;\n\n if (!myWindow) {\n that.viewer._triggerError({\n message: that.errorMessages.popupBlocked\n });\n return;\n }\n\n myWindow.document.write(that.printContainer.html());\n myWindow.document.close();\n myWindow.focus();\n myWindow.print();\n\n if (!browser.chrome || browser.chromiumEdge) {\n myWindow.close();\n } else {\n $(myWindow.document).find(\"body\").on(\"mousemove\", function() {\n myWindow.close();\n });\n }\n }\n });\n\n extend(kendo.pdfviewer, {\n OpenCommand: OpenCommand,\n PageChangeCommand: PageChangeCommand,\n DownloadCommand: DownloadCommand,\n EnableSelectionCommand: EnableSelectionCommand,\n EnablePanCommand: EnablePanCommand,\n ExportCommand: ExportCommand,\n PrintCommand: PrintCommand,\n OpenSearchCommand: OpenSearchCommand,\n ZoomCommand: ZoomCommand\n });\n\n })(window.kendo.jQuery);\n\n var __meta__ = {\n id: \"pdfviewer\",\n name: \"PDFViewer\",\n category: \"web\",\n description: \"PDFViewer to display pdfs in the browser\",\n depends: [\"core\", \"window\", \"dialog\", \"toolbar\", \"mobile.scroller\", \"upload\", \"combobox\", \"drawing\", \"binder\", \"dropdownlist\", \"numerictextbox\", \"textbox\"]\n };\n\n (function($, undefined$1) {\n var NS = \".kendoPDFViewer\",\n kendo = window.kendo,\n ui = kendo.ui,\n extend = $.extend,\n drawing = kendo.drawing,\n keys = $.extend({ PLUS: 187, MINUS: 189, ZERO: 48, NUMPAD_ZERO: 96 }, kendo.keys),\n Page,\n Widget = ui.Widget,\n progress = kendo.ui.progress,\n SCROLL = \"scroll\",\n RENDER = \"render\",\n OPEN = \"open\",\n ERROR = \"error\",\n KEYDOWN = \"keydown\" + NS,\n MOUSEWHEEL = \"DOMMouseScroll\" + NS + \" mousewheel\" + NS,\n UPDATE = \"update\",\n ZOOM_SCALE = 1.25,\n PAGE_CHANGE = \"pagechange\",\n ZOOMSTART = \"zoomStart\",\n ZOOMEND = \"zoomEnd\",\n ZOOMCOMMAND = \"ZoomCommand\",\n WHITECOLOR = \"#ffffff\",\n TABINDEX = \"tabindex\",\n CLICK = \"click\",\n CHANGE = \"change\",\n TOGGLE = \"toggle\",\n PROCESSORS = {\n pdfjs: \"pdfjs\",\n dpl: \"dpl\"\n },\n styles = {\n viewer: \"k-pdf-viewer k-widget\",\n scroller: \"k-canvas k-list-scroller\",\n enableTextSelection: \"k-enable-text-select\",\n enablePanning: \"k-enable-panning\",\n highlightClass: \"k-search-highlight\",\n charClass: \"k-text-char\"\n },\n PREDEFINED_ZOOM_VALUES = {\n auto: \"auto\",\n actual: \"actual\",\n fitToWidth: \"fitToWidth\",\n fitToPage: \"fitToPage\"\n };\n\n var PDFViewer = Widget.extend({\n init: function(element, options) {\n var that = this;\n\n Widget.fn.init.call(that, element, kendo.deepExtend({}, this.options, options));\n\n that._processMessages();\n\n that._wrapper();\n\n if (that.options.toolbar) {\n that._renderToolbar();\n }\n\n that._initProcessor(options || {});\n that._renderPageContainer();\n that._loadDocument();\n\n kendo.notify(that, kendo.ui);\n },\n\n events: [\n RENDER,\n OPEN,\n ERROR,\n ZOOMSTART,\n ZOOMEND\n ],\n\n options: {\n name: \"PDFViewer\",\n view: {\n type: \"canvas\"\n },\n pdfjsProcessing: {\n file: null\n },\n dplProcessing: {\n read: {\n url: null,\n type: \"GET\",\n dataType: \"json\",\n pageField: \"pageNumber\"\n },\n upload: {\n url: null,\n saveField: \"file\"\n },\n download: {\n url: null\n },\n loadOnDemand: false\n },\n toolbar: {\n items: []\n },\n width: 1000,\n height: 1200,\n page: 1,\n defaultPageSize: {\n width: 794,\n height: 1123\n },\n scale: null,\n zoomMin: 0.5,\n zoomMax: 4,\n zoomRate: 0.25,\n messages: {\n defaultFileName: \"Document\",\n toolbar: {\n zoom: {\n zoomLevel: \"zoom level\",\n zoomOut: \"Zoom Out\",\n zoomIn: \"Zoom In\",\n actualWidth: \"Actual Width\",\n autoWidth: \"Automatic Width\",\n fitToWidth: \"Fit to Width\",\n fitToPage: \"Fit to Page\"\n },\n open: \"Open\",\n exportAs: \"Export\",\n download: \"Download\",\n pager: {\n first: \"Go to the first page\",\n previous: \"Go to the previous page\",\n next: \"Go to the next page\",\n last: \"Go to the last page\",\n of: \"of\",\n page: \"page\",\n pages: \"pages\"\n },\n print: \"Print\",\n toggleSelection: \"Enable Selection\",\n togglePan: \"Enable Panning\",\n search: \"Search\"\n },\n errorMessages: {\n notSupported: \"Only pdf files allowed.\",\n parseError: \"PDF file fails to process.\",\n notFound: \"File is not found.\",\n popupBlocked: \"Popup is blocked.\"\n },\n dialogs: {\n exportAsDialog: {\n title: \"Export...\",\n defaultFileName: \"Document\",\n pdf: \"Portable Document Format (.pdf)\",\n png: \"Portable Network Graphics (.png)\",\n svg: \"Scalable Vector Graphics (.svg)\",\n labels: {\n fileName: \"File name\",\n saveAsType: \"Save as\",\n page: \"Page\"\n }\n },\n okText: \"OK\",\n save: \"Save\",\n cancel: \"Cancel\",\n search: {\n inputLabel: \"Search Text\",\n matchCase: \"Match Case\",\n next: \"Next Match\",\n previous: \"Previous Match\",\n close: \"Close\",\n of: \"of\",\n dragHandle: \"Drag search\"\n }\n }\n }\n },\n\n defaultTools: {\n pager: {\n name: \"pager\",\n command: \"PageChangeCommand\"\n },\n spacer: { type: \"spacer\" },\n zoomInOut: {\n type: \"buttonGroup\",\n fillMode: \"flat\",\n attributes: { \"class\": \"k-zoom-in-out-group\" },\n buttons: [\n { type: \"button\", icon: \"zoom-out\", name: \"zoomOut\", command: \"ZoomCommand\", showText: \"overflow\", options: \"{ \\\"zoomOut\\\": true, \\\"updateComboBox\\\": true }\", fillMode: \"flat\" },\n { type: \"button\", icon: \"zoom-in\", name: \"zoomIn\", command: \"ZoomCommand\", showText: \"overflow\", options: \"{ \\\"zoomIn\\\": true, \\\"updateComboBox\\\": true }\", fillMode: \"flat\" } ]\n },\n zoom: {\n type: \"component\",\n name: \"zoom\",\n command: \"ZoomCommand\",\n overflow: \"never\",\n component: \"ComboBox\",\n data: [50, 100, 150, 200, 300, 400],\n componentOptions: {\n enable: false,\n dataTextField: \"text\",\n dataValueField: \"percent\",\n valuePrimitive: true,\n clearOnEscape: false,\n commandOn: \"change\"\n }\n },\n toggleSelection: {\n type: \"buttonGroup\",\n fillMode: \"flat\",\n attributes: { \"class\": \"k-toggle-selection-group\" },\n buttons: [\n {\n togglable: true,\n command: \"EnableSelectionCommand\",\n icon: \"pointer\",\n showText: \"overflow\",\n name: \"toggleSelection\",\n group: \"toggle-pan\",\n fillMode: \"flat\"\n }, {\n togglable: true,\n command: \"EnablePanCommand\",\n icon: \"hand\",\n showText: \"overflow\",\n name: \"togglePan\",\n group: \"toggle-pan\",\n selected: true,\n fillMode: \"flat\"\n }\n ]\n },\n spacer2: { type: \"spacer\" },\n search: {\n type: \"button\",\n command: \"OpenSearchCommand\",\n icon: \"search\",\n name: \"search\",\n showText: \"overflow\",\n enable: false,\n fillMode: \"flat\"\n },\n open: {\n type: \"button\",\n showText: \"overflow\",\n name: \"open\",\n icon: \"folder-open\",\n command: \"OpenCommand\",\n fillMode: \"flat\"\n },\n download: {\n type: \"button\",\n showText: \"overflow\",\n name: \"download\",\n icon: \"download\",\n command: \"DownloadCommand\",\n enable: false,\n fillMode: \"flat\"\n },\n print: {\n type: \"button\",\n showText: \"overflow\",\n name: \"print\",\n icon: \"print\",\n command: \"PrintCommand\",\n enable: false,\n fillMode: \"flat\"\n }\n },\n\n exportAsTool: {\n exportAs: { type: \"button\", showText: \"overflow\", name: \"exportAs\", icon: \"image-export\", command: \"ExportCommand\", fillMode: \"flat\" }\n },\n\n pagerTools: [\n {\n type: \"buttonGroup\",\n fillMode: \"flat\",\n buttons: [\n { type: \"button\", icon: \"caret-alt-to-left\", name: \"first\", showText: \"overflow\", options: \"{ \\\"value\\\": \\\"first\\\" }\", attributes: { class: \"k-first-link\" } },\n { type: \"button\", icon: \"caret-alt-left\", name: \"previous\", showText: \"overflow\", options: \"{ \\\"value\\\": \\\"prev\\\" }\", attributes: { class: \"k-prev-link\" }, rounded: \"none\" } ]\n },\n {\n type: \"component\",\n component: \"TextBox\",\n name: \"page\",\n attributes: { class: \"k-viewer-pager-input\" },\n element: \"\",\n overflow: \"never\",\n componentOptions: {\n commandOn: \"change\"\n }\n },\n {\n overflow: \"never\",\n template: function(data) {\n return \"\";\n },\n componentOptions: {\n messages: {\n of: \"of\",\n pages: \"pages\"\n }\n }\n },\n {\n type: \"buttonGroup\",\n fillMode: \"flat\",\n buttons: [\n { type: \"button\", icon: \"caret-alt-right\", name: \"next\", showText: \"overflow\", options: \"{ \\\"value\\\": \\\"next\\\" }\", fillMode: \"flat\", attributes: { class: \"k-next-link\" }, rounded: \"none\" },\n { type: \"button\", icon: \"caret-alt-to-right\", name: \"last\", showText: \"overflow\", options: \"{ \\\"value\\\": \\\"last\\\" }\", fillMode: \"flat\", attributes: { class: \"k-last-link\" } }\n ]\n } ],\n\n _processMessages: function() {\n var messages = this.options.messages.toolbar,\n zoom = messages.zoom,\n pager = messages.pager;\n\n if ($.isPlainObject(zoom)) {\n this.options.messages.toolbar = $.extend({}, this.options.messages.toolbar, zoom);\n this.options.messages.toolbar.zoom = zoom.zoomLevel || this.options.messages.toolbar.zoom;\n }\n\n if ($.isPlainObject(pager)) {\n this.options.messages.toolbar = $.extend({}, this.options.messages.toolbar, pager);\n }\n },\n\n _wrapper: function() {\n var that = this,\n options = that.options;\n\n that.wrapper = that.element;\n\n that.wrapper\n .width(options.width)\n .height(options.height)\n .addClass(styles.viewer)\n .on(KEYDOWN, that._keydown.bind(that));\n\n that._allowResize = that.options.scale === null;\n that._autoZoomScale = ZOOM_SCALE;\n that.zoomScale = that.options.scale || that._autoZoomScale;\n\n that._resizeHandler = kendo.onResize(function() {\n that.resize();\n });\n\n that._pageNum = that.options.page;\n },\n\n _keydown: function(e) {\n var plusShortcuts = [keys.PLUS, keys.NUMPAD_PLUS],\n minusShortcuts = [keys.MINUS, keys.NUMPAD_MINUS],\n zeroShortcuts = [keys.ZERO, keys.NUMPAD_ZERO],\n shouldExecute = false,\n args = {\n command: ZOOMCOMMAND,\n options: { updateComboBox: true }\n };\n\n if (!e.ctrlKey || this._blankPage || this.processingLib === PROCESSORS.dpl) {\n return;\n }\n\n if (plusShortcuts.includes(e.keyCode)) {\n args.options.zoomIn = true;\n shouldExecute = true;\n } else if (minusShortcuts.includes(e.keyCode)) {\n args.options.zoomOut = true;\n shouldExecute = true;\n } else if (zeroShortcuts.includes(e.keyCode)) {\n args.options.value = ZOOM_SCALE;\n shouldExecute = true;\n }\n\n if (shouldExecute) {\n this.execute(args);\n e.preventDefault();\n }\n },\n\n _initProcessor: function(options) {\n var that = this,\n processingOptions;\n\n processingOptions = options.dplProcessing ? that.options.dplProcessing : that.options.pdfjsProcessing;\n that.processingLib = options.dplProcessing ? PROCESSORS.dpl : PROCESSORS.pdfjs;\n\n that.processor = new kendo.pdfviewer[that.processingLib].processor(processingOptions, that);\n Page = kendo.pdfviewer[that.processingLib].Page;\n },\n\n _renderToolbar: function() {\n var that = this,\n options = that.options,\n toolbarOptions = extend({}, options.toolbar),\n tools = toolbarOptions.items && toolbarOptions.items.length ? toolbarOptions.items : Object.keys(that.defaultTools);\n\n tools = that._processTools(tools);\n\n toolbarOptions = {\n defaultTools: $.extend({}, that.defaultTools, that.exportAsTool),\n parentMessages: options.messages.toolbar,\n tools: tools,\n resizable: true\n };\n\n var toolbarElement = $(\"
\");\n toolbarElement.appendTo(that.element);\n that.toolbar = new kendo.ui.ToolBar(toolbarElement, toolbarOptions);\n that.options.toolbar = that.toolbar.options;\n\n that.toolbar.bind(TOGGLE, that._toolbarClick.bind(that));\n that.toolbar.bind(CLICK, that._toolbarClick.bind(that));\n that.toolbar.bind(CHANGE, that._toolbarClick.bind(that));\n\n that.bind({\n update: that._updateToolbar.bind(that)\n });\n\n return that.toolbar;\n },\n\n _processTools: function(tools) {\n var that = this,\n messages = that.options.messages.toolbar;\n\n tools = tools.flatMap(function (t) {\n if (t === \"zoom\") {\n t = that.defaultTools.zoom;\n } else if (t === \"pager\") {\n t = that.defaultTools.pager;\n }\n\n if (t.name === \"zoom\") {\n t = $.extend({}, that.defaultTools.zoom, t);\n\n var zoomLevels = [{\n percent: PREDEFINED_ZOOM_VALUES.auto,\n text: messages.autoWidth\n }, {\n percent: PREDEFINED_ZOOM_VALUES.actual,\n text: messages.actualWidth\n }, {\n percent: PREDEFINED_ZOOM_VALUES.fitToWidth,\n text: messages.fitToWidth\n }, {\n percent: PREDEFINED_ZOOM_VALUES.fitToPage,\n text: messages.fitToPage\n }];\n\n // eslint-disable-next-line\n var comboOptions = t.data.map(function (i) { return { percent: i, text: i + \"%\" } });\n var value = that.options.scale ? that.options.scale * 100 + \"%\" : \"auto\";\n\n zoomLevels = zoomLevels.concat(comboOptions);\n t.componentOptions.dataSource = zoomLevels;\n t.componentOptions.value = value;\n } else if (t.name === \"pager\") {\n t = $.extend({}, that.defaultTools.pager, t);\n\n var pagerTools = that.pagerTools;\n\n that.pager = true;\n\n t = pagerTools.map(function (p) {\n var compMessages;\n\n if (p.componentOptions && p.componentOptions.messages) {\n compMessages = p.componentOptions.messages;\n Object.keys(messages).forEach(function (key) {\n p.componentOptions.messages[key] = messages.pager[key];\n });\n }\n\n if (p.buttons) {\n p.buttons = p.buttons.map(function (b) {\n if (b.icon && b.icon.indexOf(\"caret-alt\") > -1 && kendo.support.isRtl(that.element)) {\n var direction = b.icon.indexOf(\"left\") > -1 ? \"left\" : \"right\";\n var rtlDirection = b.icon.indexOf(\"left\") > -1 ? \"right\" : \"left\";\n b.icon = b.icon.replace(direction, rtlDirection);\n }\n b.command = t.command;\n return b;\n });\n } else {\n p.command = t.command;\n }\n\n return p;\n });\n }\n\n return t;\n });\n\n return tools;\n },\n\n _updateToolbar: function(e) {\n var pageOptions = {\n page: e.page || 1,\n total: e.total || 1\n },\n toolbar = this.toolbar,\n toolbarEl = toolbar.element,\n zoomCombo = toolbarEl.find(\"[data-command=ZoomCommand][data-role=combobox]\").data(\"kendoComboBox\"),\n toFocus = toolbarEl.find(\".k-focus\");\n\n if (toFocus.length === 0) {\n toFocus = toolbarEl.find(\"[tabindex=0]\").first();\n\n if (toFocus.length === 0) {\n toFocus = toolbar._getAllItems().first();\n }\n }\n\n if (zoomCombo) {\n zoomCombo.enable(!e.isBlank);\n if (e.action === \"zoom\") {\n this._updateZoomComboBox(e.zoom);\n }\n }\n\n if ((e.action === \"pagechange\" || e.isBlank) && this.pager) {\n this._updatePager(pageOptions);\n }\n\n this._updateOnBlank(e.isBlank);\n\n toolbar._resetTabIndex(toFocus);\n },\n\n _updateOnBlank: function(isBlank) {\n var toolbar = this.toolbar,\n toolbarEl = toolbar.element;\n\n toolbar.enable(toolbarEl.find(\".k-toggle-selection-group\"), !isBlank);\n toolbar.enable(toolbarEl.find(\".k-zoom-in-out-group\"), !isBlank);\n\n toolbar.enable(toolbarEl.find(\"[data-command='OpenSearchCommand']\"), !isBlank);\n toolbar.enable(toolbarEl.find(\"[data-command='DownloadCommand']\"), !isBlank);\n toolbar.enable(toolbarEl.find(\"[data-command='PrintCommand']\"), !isBlank);\n },\n\n _updatePager: function(options) {\n var toolbarEl = this.toolbar.element,\n textBox = toolbarEl.find(\"#page-input\").data(\"kendoTextBox\"),\n totalPagesSpan = toolbarEl.find(\"#total-page\");\n\n if (textBox && options.page) {\n textBox.value(options.page);\n }\n\n if (totalPagesSpan.length && options.total) {\n totalPagesSpan.text(options.total);\n }\n\n this._togglePagerDisabledClass(options);\n },\n\n _togglePagerDisabledClass: function(options) {\n var toolbar = this.toolbar,\n toolbarEl = toolbar.element,\n total = !options.total,\n prevFirst = toolbarEl.find(\".k-prev-link\").closest(\".k-button-group\"),\n nextLast = toolbarEl.find(\".k-next-link\").closest(\".k-button-group\"),\n textBox = toolbarEl.find(\"#page-input\").data(\"kendoTextBox\");\n\n if (prevFirst.length) {\n toolbar.enable(prevFirst, total || options.page !== 1);\n }\n if (nextLast.length) {\n toolbar.enable(nextLast, total || options.page !== options.total);\n }\n\n if (textBox) {\n textBox.enable(options.total > 1);\n }\n },\n\n _updateZoomComboBox: function(value) {\n var isPredefined = value === PREDEFINED_ZOOM_VALUES.auto ||\n value === PREDEFINED_ZOOM_VALUES.actual ||\n value === PREDEFINED_ZOOM_VALUES.fitToPage ||\n value === PREDEFINED_ZOOM_VALUES.fitToWidth,\n zoomCombo = this.toolbar.element.find(\"[data-command=ZoomCommand][data-role=combobox]\").data(\"kendoComboBox\");\n\n if (!isPredefined) {\n value = Math.round(value * 100) + '%';\n }\n\n if (zoomCombo) {\n zoomCombo.value(value);\n }\n },\n\n _toolbarClick: function(ev) {\n var command = $(ev.target).data(\"command\"),\n options = $(ev.target).data(\"options\");\n\n options = extend({}, { value: $(ev.target).val() }, options);\n\n if (!command) {\n return;\n }\n\n this.execute({\n command: command,\n options: options\n });\n },\n\n _initErrorDialog: function(options) {\n var that = this;\n\n if (!that._errorDialog) {\n options = extend(options, {\n messages: that.options.messages\n });\n var dialogInstance = new kendo.pdfviewer.dialogs.ErrorDialog(options);\n that._errorDialog = dialogInstance._dialog;\n }\n return that._errorDialog;\n },\n\n _renderPageContainer: function() {\n var that = this;\n\n if (!that.pageContainer) {\n that.pageContainer = $(\"
\");\n that.pageContainer.addClass(styles.scroller);\n that.pageContainer.attr(TABINDEX, 0);\n that.wrapper.append(that.pageContainer);\n }\n },\n\n _triggerError: function(options) {\n var dialog = this._initErrorDialog();\n extend(options, {\n dialog: dialog\n });\n if (this.pageContainer) {\n progress(this.pageContainer, false);\n }\n\n if (this.trigger(ERROR, options))\n {\n return;\n }\n\n dialog.open().content(options.message);\n },\n\n _renderPages: function() {\n var that = this,\n document = that.document,\n pagesData;\n\n that.pages = [];\n\n if (!document || !document.total) {\n that._renderBlankPage();\n return;\n }\n\n pagesData = document.pages;\n\n for (var i = 1; i <= document.total; i++) {\n var viewerPage,\n pageData = {\n processor: that.processor,\n number: i\n };\n\n if (pagesData && pagesData.length) {\n pageData = extend(pageData, pagesData[i - 1]);\n }\n\n viewerPage = new Page(pageData, that);\n that.pages.push(viewerPage);\n that.pageContainer.append(viewerPage.element);\n }\n\n that._attachContainerEvents();\n that._getVisiblePagesCount();\n },\n\n _renderBlankPage: function() {\n this._blankPage = new Page(this.options.defaultPageSize, this);\n\n this.pageContainer.append(this._blankPage.element);\n\n this.trigger(UPDATE, { isBlank: true });\n },\n\n _resize: function() {\n var that = this,\n containerWidth,\n ratio;\n\n if (!that._allowResize) {\n return;\n }\n\n if (!that.pages || !that.pages.length) {\n if (that._blankPage) {\n ratio = containerWidth / that._blankPage.element.width();\n that._blankPage.resize(ratio);\n }\n return;\n }\n\n if (that.toolbar) {\n that.toolbar.resize(true);\n }\n\n if (that._resizeHandler) {\n clearTimeout(that._resizeHandler);\n }\n that._resizeHandler = setTimeout(that._resizePages.bind(that), 100);\n },\n\n _resizePages: function() {\n var that = this,\n containerWidth = that.pageContainer[0].clientWidth,\n ratio = 0;\n\n that.pages.forEach(function(page) {\n var currentRatio = containerWidth / page.element.width();\n\n if (currentRatio > ratio) {\n ratio = currentRatio;\n }\n });\n\n if (that._autoFit) {\n that.zoom(that._autoFit, true);\n return;\n }\n\n ratio = Math.min(Math.max(ratio, that.options.zoomMin), ZOOM_SCALE);\n if (ratio != that.zoomScale) {\n that.zoom(ratio, true);\n that.zoomScale = ratio;\n that._allowResize = true;\n }\n },\n\n _attachContainerEvents: function() {\n var that = this;\n\n that._wheel = kendo.throttle(\n that._wheel.bind(that),\n 300\n );\n\n if (that.processingLib !== PROCESSORS.dpl) {\n that.pageContainer.on(MOUSEWHEEL, function(e) {\n if (!e.ctrlKey) {\n return;\n }\n\n if (document.activeElement !== that.pageContainer[0]) {\n that.pageContainer.trigger(\"focus\");\n }\n\n that._wheel(e);\n e.preventDefault();\n });\n }\n\n that._scroller = new kendo.mobile.ui.Scroller(that.pageContainer, {\n zoom: false,\n elastic: true\n });\n\n that._scroller.scrollElement.addClass(styles.enablePanning);\n that._scroller.bind(SCROLL, that._scroll.bind(this));\n },\n\n _scroll: function(e) {\n var that = this,\n containerScrollHeight = that.pageContainer[0].scrollHeight,\n containerHeight = that.pageContainer.height(),\n containerScrollTop = e.scrollTop,\n containerOffsetTop = that.pageContainer.offset().top,\n total = that.pages.length,\n pageNum = that._pageNum,\n pageIndex = pageNum - 1,\n pageToLoadNum = pageNum,\n pageToLoad,\n currentPage, currentPageTop, currentPageHeight,\n previousPage, prevPageTop, prevPageHeight,\n scrollDirection = containerScrollTop - that._prevScrollTop > 0 ? 1 : -1;\n\n if (that._preventScroll || !total) {\n that._preventScroll = false;\n return;\n }\n\n that._scrollingStarted = true;\n\n currentPage = that.pages[pageIndex];\n currentPageTop = currentPage.element.offset().top - containerOffsetTop;\n currentPageHeight = currentPage.element.height();\n\n if (scrollDirection == -1 && that.pages[pageIndex + scrollDirection]) {\n previousPage = that.pages[pageIndex - that._visiblePagesCount] || that.pages[pageIndex + scrollDirection];\n prevPageTop = previousPage.element.offset().top - containerOffsetTop;\n prevPageHeight = previousPage.element.height();\n }\n\n if (Math.abs(containerScrollTop - (that._prevScrollTop || 0)) > containerHeight * that.zoomScale) {\n pageToLoadNum = Math.floor(containerScrollTop * (1 / (containerScrollHeight / total))) + 1;\n } else if (currentPageTop < 0 && Math.abs(currentPageTop) >= currentPageHeight / 2 && scrollDirection === 1) {\n pageToLoadNum++;\n } else if (previousPage && Math.abs(prevPageTop) <= prevPageHeight / 2) {\n pageToLoadNum--;\n }\n\n if (pageNum !== pageToLoadNum && pageToLoadNum >= 1 && pageToLoadNum <= total) {\n pageToLoad = that.pages[pageToLoadNum - 1].element;\n\n if (pageToLoad.offset().top > containerHeight) {\n return;\n }\n\n that._pageNum = pageToLoadNum;\n that._loadVisiblePages();\n\n that.trigger(UPDATE, { action: PAGE_CHANGE, page: pageToLoadNum, total: total });\n }\n\n that._prevScrollTop = containerScrollTop;\n },\n\n _wheel: function(e) {\n var originalEvent = e.originalEvent,\n delta = originalEvent.wheelDelta ? -originalEvent.wheelDelta : originalEvent.detail,\n zoomIn = delta < 0;\n\n this.execute({\n command: ZOOMCOMMAND,\n options: {\n zoomIn: zoomIn,\n zoomOut: !zoomIn,\n updateComboBox: true\n }\n });\n\n e.preventDefault();\n },\n\n zoom: function(scale, preventComboBoxChange) {\n var that = this;\n if (!scale) {\n return that.zoomScale;\n }\n\n return that.execute({\n command: ZOOMCOMMAND,\n options: {\n value: scale,\n updateComboBox: !preventComboBoxChange\n }\n });\n },\n\n execute: function(options) {\n var commandOptions = extend({ viewer: this }, options.options);\n var command = new kendo.pdfviewer[options.command](commandOptions);\n return command.exec();\n },\n\n _loadDocument: function() {\n var that = this;\n var page = that.options.page;\n\n progress(that.pageContainer, true);\n that.processor.fetchDocument().done(function(document) {\n that._clearPages();\n that.document = document;\n\n that._renderPages();\n that.resize(true);\n\n if (document) {\n page = page >= 1 && page <= document.total ? page : 1;\n that.activatePage(page);\n }\n\n progress(that.pageContainer, false);\n });\n },\n\n loadPage: function(number) {\n var page = this.pages && this.pages[number - 1];\n\n if (page) {\n return page.load(this.zoomScale);\n }\n },\n\n activatePage: function(number) {\n var page = this.pages && this.pages[number - 1],\n scroller = this._scroller,\n scrollerTopPosition,\n scrollerTopOffset,\n pageTopOffset,\n pageMargin;\n\n if (!page) {\n return;\n }\n\n scrollerTopPosition = scroller.scrollTop;\n scrollerTopOffset = scroller.element.offset().top;\n pageTopOffset = page.element.offset().top;\n pageMargin = !this._autoFit ? parseInt(page.element.css(\"marginTop\"), 10) : 0;\n\n this._pageNum = number;\n this._loadVisiblePages();\n\n this._preventScroll = true;\n\n this._scroller.scrollTo(0, -scrollerTopPosition - pageTopOffset + scrollerTopOffset + pageMargin);\n this.trigger(UPDATE, { action: PAGE_CHANGE, page: number, total: this.pages.length });\n },\n\n _getVisiblePagesCount: function() {\n var that = this,\n loadedPagesHeight = 0,\n updatedVisiblePagesCount = 0,\n containerHeight = that.pageContainer[0].clientHeight,\n index = 0;\n\n while (loadedPagesHeight <= containerHeight && index < that.pages.length)\n {\n loadedPagesHeight += that.pages[index].element.height();\n updatedVisiblePagesCount++;\n index++;\n }\n\n that._visiblePagesCount = updatedVisiblePagesCount;\n },\n\n _loadVisiblePages: function() {\n var pagesCount = this.pages && this.pages.length,\n minVisiblePageNum = Math.max(this._pageNum - this._visiblePagesCount, 1),\n maxVisiblePageNum = Math.min(this._pageNum + this._visiblePagesCount, pagesCount);\n\n this._visiblePages = this.pages.slice(minVisiblePageNum - 1, maxVisiblePageNum);\n\n for (var i = minVisiblePageNum; i <= maxVisiblePageNum; i++)\n {\n this.loadPage(i);\n }\n },\n\n _loadAllPages: function() {\n var pagesCount = this.pages && this.pages.length;\n var promises = [];\n\n for (var i = 0; i <= pagesCount; i++)\n {\n promises.push(this.loadPage(i));\n }\n\n return promises;\n },\n\n fromFile: function(file) {\n this.zoomScale = this.options.scale || ZOOM_SCALE;\n this.zoom(this.zoomScale, true);\n this.trigger(UPDATE, { action: \"zoom\", zoom: this.options.scale || \"auto\" });\n\n this.processor._updateDocument(file);\n this._loadDocument();\n },\n\n exportImage: function(options) {\n var that = this;\n var pageNumber = options.page;\n var page = that.pages[pageNumber - 1] || that._blankPage;\n var rootGroup = new drawing.Group();\n\n page.load();\n\n var background = kendo.drawing.Path.fromRect(new kendo.geometry.Rect([0, 0], [page.width, page.height]), {\n fill: {\n color: WHITECOLOR\n },\n stroke: null\n });\n\n progress(that.pageContainer, true);\n rootGroup.append(background, page.group);\n\n drawing.exportImage(rootGroup).done(function(data) {\n progress(that.pageContainer, false);\n kendo.saveAs({\n dataURI: data,\n fileName: options.fileName,\n proxyURL: options.proxyURL || \"\",\n forceProxy: options.forceProxy,\n proxyTarget: options.proxyTarget\n });\n });\n },\n\n exportSVG: function(options) {\n var that = this;\n var pageNumber = options.page;\n var page = that.pages[pageNumber - 1] || that._blankPage;\n\n progress(that.pageContainer, true);\n\n page.load();\n\n drawing.exportSVG(page.group).done(function(data) {\n progress(that.pageContainer, false);\n kendo.saveAs({\n dataURI: data,\n fileName: options.fileName,\n proxyURL: options.proxyURL || \"\",\n forceProxy: options.forceProxy,\n proxyTarget: options.proxyTarget\n });\n });\n },\n\n setOptions: function(options)\n {\n var that = this;\n\n if (options.pdfjsProcessing || options.dplProcessing) {\n that._initProcessor(options || {});\n }\n\n options = $.extend(that.options, options);\n\n Widget.fn.setOptions.call(that, options);\n\n if (options.page) {\n that._pageNum = options.page;\n that.activatePage(options.page);\n }\n\n if (options.width) {\n that.element.width(options.width);\n }\n\n if (options.height) {\n that.element.height(options.height);\n }\n },\n\n destroy: function()\n {\n if (this._resizeHandler)\n {\n kendo.unbindResize(this._resizeHandler);\n }\n\n //destroy nested components\n if (this._errorDialog) {\n this._errorDialog.destroy();\n }\n\n if (this._saveDialog) {\n this._saveDialog.destroy();\n }\n\n if (this._upload) {\n this._upload.destroy();\n }\n\n if (this.toolbar) {\n this.toolbar.unbind();\n this.toolbar.destroy();\n this.toolbar = null;\n }\n\n if (this.pages && this.pages.length) {\n this.pages.forEach(function(page) {\n page.destroy();\n });\n this.pages = [];\n }\n\n if (this._scroller) {\n this._scroller.unbind();\n this._scroller.destroy();\n }\n this.pageContainer.off(NS);\n\n Widget.fn.destroy.call(this);\n },\n\n _clearPages: function() {\n this.pages = [];\n this.document = null;\n this._pageNum = 1;\n\n this.pageContainer.off(NS);\n this.pageContainer.empty();\n\n if (this._scroller)\n {\n this._scroller.reset();\n this._scroller.unbind();\n this._scroller.destroy();\n }\n },\n\n _toggleSelection: function(enable) {\n var that = this;\n\n if (enable === undefined$1) {\n enable = true;\n }\n\n that._scroller.userEvents._shouldNotMove = enable;\n\n that._scroller.scrollElement.toggleClass(styles.enableTextSelection, enable);\n that._scroller.scrollElement.toggleClass(styles.enablePanning, !enable);\n },\n\n\n _initSearchDOM: function() {\n var that = this;\n var promise = new Promise(function(resolve) {\n Promise.all(that._loadAllPages()).then(function() {\n that._searchDOM = new kendo.pdfviewer.SearchDOM({\n target: that._getTextLayers(),\n highlightClass: styles.highlightClass,\n charClass: styles.charClass\n });\n\n resolve();\n });\n });\n\n return promise;\n },\n\n _getTextLayers: function() {\n return this.pages.map(function(page) {\n return page.textLayer;\n });\n }\n });\n\n ui.plugin(PDFViewer);\n })(window.kendo.jQuery);\n var kendo$1 = kendo;\n\n return kendo$1;\n\n}));\n"]}