{"version":3,"file":"kendo.pdfviewer.min.js","names":["factory","define","amd","extend","window","kendo","jQuery","pdfviewer","pdfjs","lib","pdfjsLib","isLoaded","console","error","$","undefined$1","PDFJS","Class","atob","PDFJSProcessor","init","options","viewer","this","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","get","fn","call","defaultScale","force","_scale","_page","_renderPromise","dpr","devicePixelRatio","context","getContext","_dpr","_renderTask","cancel","canvasContext","_renderTextLayer","textLayer","remove","getTextContent","normalizeWhitespace","textContent","css","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","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","attributes","class","buttons","icon","showText","fillMode","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","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 (factory) {\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.upload'], factory) :\n factory();\n})((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 = $(\"\");\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 {0} \",\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 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 attributes: { \"class\": \"k-toggle-selection-group\" },\n buttons: [\n {\n togglable: true,\n command: \"EnableSelectionCommand\",\n icon: \"cursor\",\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 buttons: [\n { type: \"button\", icon: \"arrow-end-left\", name: \"first\", showText: \"overflow\", options: \"{ \\\"value\\\": \\\"first\\\" }\", fillMode: \"flat\", attributes: { class: \"k-first-link\" } },\n { type: \"button\", icon: \"arrow-60-left\", name: \"previous\", showText: \"overflow\", options: \"{ \\\"value\\\": \\\"prev\\\" }\", fillMode: \"flat\", 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 buttons: [\n { type: \"button\", icon: \"arrow-60-right\", name: \"next\", showText: \"overflow\", options: \"{ \\\"value\\\": \\\"next\\\" }\", fillMode: \"flat\", attributes: { class: \"k-next-link\" }, rounded: \"none\" },\n { type: \"button\", icon: \"arrow-end-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 var pagerTools = that.pagerTools;\n\n that.pager = true;\n\n t = pagerTools.map(function (p) {\n if (p.buttons) {\n p.buttons = p.buttons.map(function (b) {\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\n}));\n"]}