{"version":3,"sources":["kendo.pdfviewer.js"],"names":["f","define","$","undefined","extend","isLoaded","window","pdfjsLib","console","error","kendo","pdfviewer","pdfjs","lib","jQuery","amd","a1","a2","a3","PDFJS","Class","atob","PDFJSProcessor","init","options","viewer","that","this","file","fetchDocument","deferred","Deferred","messages","errorMessages","_isBase64Data","data","getDocument","promise","then","pdf","i","pageSizes","pagePromises","_downloadData","getData","blob","Blob","type","resolve","numPages","push","getPage","Promise","all","map","pagePromise","viewport","getViewport","scale","width","height","total","pages","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","notBase64","length","test","indexOf","renderTextLayer","params","processor","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","NS","Widget","CHANGE","KEYDOWN","CLICK","support","click","SHRINKWIDTH","kendoAttr","attr","proxy","DOT","ARIA_DISABLED","pagerStyles","wrapperClass","iconFirst","iconLast","iconPrev","iconNext","first","last","nav","disabled","Pager","element","fn","call","linkTemplate","template","addClass","_renderLinks","_toggleDisabledClass","_attachEvents","previousNext","input","events","_pagerLink","iconClass","text","pageIdx","wrapClass","firstLink","prevLink","previous","nextLink","next","lastLink","append","_renderInput","toggleClass","on","_click","keyCode","keys","ENTER","preventDefault","_keydown","target","currentTarget","parseInt","isDefaultPrevented","_change","key","val","upDown","UP","DOWN","allowedKeys","RIGHT","LEFT","BACKSPACE","DELETE","direction","isNaN","match","trigger","setOptions","prevTotal","totalMessage","inputTemplate","shouldShrink","parent","pagerInputWrap","find","off","format","of","html","appendZoomButtons","isOverflow","className","styles","zoomOverflowButtons","zoomButtons","ZOOM_BUTTON_TEMPLATE","zoomOut","command","ZOOMOUT","zoomOutIcon","showText","zoomIn","ZOOMIN","zoomInIcon","ToolBarZoom","ToolBarOverflowZoom","ViewerToolBar","ACTION","FLATBUTTONCLASS","Item","toolbar","ToolBar","PREDEFINED_ZOOM_VALUES","auto","actual","fitToWidth","fitToPage","overflowHidden","ZOOM_COMBOBOX_TEMPLATE","DefaultTools","pager","overflow","spacer","zoom","zoomInOut","combobox","zoomLevels","enable","toggleSelection","attributes","class","buttons","togglable","icon","group","selected","spacer2","search","open","print","AllTools","exportAs","ToolbarPager","pagerElement","change","addUidAttr","addOverflowAttr","action","value","children","targetIndex","index","shiftKey","TAB","focus","stopPropagation","registerComponent","_init","_initValue","_appendElements","throttle","bind","zoomElement","_buildComboBox","comboOptions","percent","autoWidth","actualWidth","concat","zoomLevel","mobileOS","kendoComboBox","clearButton","getKendoComboBox","wrapper","_currentValue","parsedValue","sender","replace","_buttonCommand","button","closest","updateComboBox","items","Object","_updateItems","toggle","update","_update","tool","toolOptions","toolName","isBuiltInTool","isPlainObject","aria-label","title","data-command","deepExtend","pageOptions","isBlank","_updateZoomComboBox","isPredefined","Math","round","args","Toolbar","normalizeText","String","REPLACE_REGEX","SPACE","objectKey","object","parts","sort","join","hashKey","str","hash","charCodeAt","zeroSize","baseline","measureText","style","measureBox","TextMetrics","current","measure","LRUCache","DEFAULT_OPTIONS","defaultMeasureBox","util","size","_size","_length","_map","put","entry","_head","_tail","newer","older","get","baselineMarkerSize","createElement","cssText","_cache","styleKey","cacheKey","cachedResult","baselineMarker","textStr","box","_baselineMarker","cloneNode","textContent","appendChild","body","offsetWidth","offsetHeight","offsetTop","parentNode","removeChild","marker","noop","drawing","Group","Surface","RENDER","geometryTypes","Path","MultiPath","Rect","Image","Text","Page","pageNumber","_updatePageSize","ratio","pageElement","min","render","DPLPage","draw","surface","_drawGeometries","load","loaded","_initSurface","surfaceOptions","view","kGeometry","geometry","_drawPath","_drawRect","_drawImage","_drawText","rectGeo","point","transform","_getMatrix","fill","fillOptions","stroke","strokeOptions","imageRect","src","font","content","subPath","j","segment","drawAction","path","paths","segments","moveTo","apply","points","lineTo","curveTo","closed","close","matrix","create","Matrix","prototype","PDFJSPage","canvas","defaultScale","force","_scale","_page","_renderPromise","context","getContext","_renderTask","cancel","canvasContext","_renderTextLayer","textLayer","remove","getTextContent","normalizeWhitespace","css","container","textDivs","enhanceTextSelection","isArray","SearchDOM","processDom","highlightClass","charClass","targets","textNodes","charIndex","forEach","traverseToTextNode","processTextNode","node","nodeType","childNodes","span","wrap","empty","splitChars","unwrap","newHtml","innerHTML","matchCase","expression","RegExp","matches","resetMark","resetHighlight","resetMatchIndex","exec","startOffset","endOffset","highlightAll","mark","start","end","highlight","matchIndex","removeClass","removeAttr","currentIndex","wrapInner","contents","nextMatch","previousMatch","getMarkedIndex","getFirstMarked","eq","each","item","EXTENSIONS","svg","png","ErrorDialog","actions","dialogs","okText","_dialog","kendoDialog","getKendoDialog","center","ExportAsDialog","fileFormats","description","exportAsDialog","extension","_initializeDialog","autoFocus","resizable","modal","preventScroll","maxWidth","_updateModel","pagesCount","viewModel","set","dialogMessages","dialog","kendoWindow","getKendoWindow","observable","defaultFileName","SearchDialog","dialogElm","dialogOffset","top","position","left","Window","minHeight","draggable","dragHandle","activate","ev","searchModel","boundValue","searchText","matchCaseClick","prev","onKeyup","navigationFn","onInput","parseJSON","OPEN","ZOOMSTART","ZOOMEND","Command","OpenCommand","_upload","_initUpload","uploadOptions","select","_onSelect","_onSuccess","_onError","complete","_onComplete","showFileList","multiple","validation","allowedExtensions","async","saveUrl","autoUpload","saveField","kendoUpload","getKendoUpload","response","XMLHttpRequest","notSupported","fileToUpload","files","toLowerCase","fromFile","onerror","readAsArrayBuffer","rawFile","PageChangeCommand","DownloadCommand","info","ExportCommand","_saveDialog","_initDialog","exportImage","exportSVG","EnableSelectionCommand","_toggleSelection","EnablePanCommand","OpenSearchCommand","searchDialog","offset","_open","_next","_prev","_close","changeHandler","zoomStartHandler","_closeDialog","openFileHandler","_searchDOM","_initSearchDOM","searchEngine","unbind","_updateSearchModel","field","model","_scrollToMark","marked","scroller","_scroller","scrollElement","scrollTo","scrollLeft","ZoomCommand","updateViewer","loadedPagesHeight","_pageNum","containerHeight","clientHeight","updatedVisiblePagesCount","renderTasks","processingLib","_calculateZoom","scrollingStarted","_scrollingStarted","scrollTop","scrollHeight","_resize","zoomScale","pageHeight","_visiblePages","_visiblePagesCount","_loadVisiblePages","_triggerZoomEnd","preventZoom","viewerOptions","visibleCanvas","scaleValue","_allowResize","_autoFit","zoomRate","_autoZoomScale","zoomMin","zoomMax","PrintCommand","_renderPrintContainer","_loadAllPages","processAfterRender","printContainer","getRenderPromise","renderPromises","loadPromises","_originalScale","_renderPrintPages","setTimeout","_printDocument","_renderPrintImage","div","img","toDataURL","myWindow","write","popupBlocked","PLUS","MINUS","ZERO","NUMPAD_ZERO","SCROLL","ERROR","FOCUS","MOUSEWHEEL","UPDATE","ZOOM_SCALE","PAGE_CHANGE","ZOOMCOMMAND","WHITECOLOR","TABINDEX","PROCESSORS","enableTextSelection","enablePanning","PDFViewer","_wrapper","_renderToolbar","_initProcessor","_renderPageContainer","_loadDocument","_tabindex","notify","pdfjsProcessing","dplProcessing","loadOnDemand","defaultPageSize","togglePan","labels","saveAsType","save","inputLabel","_focus","_resizeHandler","onResize","plusShortcuts","NUMPAD_PLUS","minusShortcuts","NUMPAD_MINUS","zeroShortcuts","shouldExecute","ctrlKey","_blankPage","execute","processingOptions","toolbarOptions","toolbarElement","appendTo","_initErrorDialog","dialogInstance","_errorDialog","pagesData","viewerPage","pageData","_attachContainerEvents","_getVisiblePagesCount","containerWidth","clearTimeout","_resizePages","clientWidth","currentRatio","max","_wheel","activeElement","mobile","Scroller","elastic","_scroll","pageToLoad","currentPage","currentPageTop","currentPageHeight","previousPage","prevPageTop","prevPageHeight","containerScrollHeight","containerScrollTop","containerOffsetTop","pageNum","pageIndex","pageToLoadNum","scrollDirection","_prevScrollTop","_preventScroll","abs","floor","originalEvent","delta","wheelDelta","detail","preventComboBoxChange","commandOptions","loadPage","scrollerTopPosition","scrollerTopOffset","pageTopOffset","pageMargin","minVisiblePageNum","maxVisiblePageNum","slice","promises","background","rootGroup","fromRect","color","forceProxy","proxyTarget","unbindResize","reset","userEvents","_shouldNotMove","_getTextLayers","plugin"],"mappings":"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","file":"kendo.pdfviewer.min.js","sourcesContent":["/*!\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n*/\n(function (f, define) {\n define('pdfviewer/pdfjs', ['kendo.core'], f);\n}(function () {\n (function ($, undefined) {\n var extend = $.extend;\n var isLoaded = function () {\n if (!window.pdfjsLib) {\n var console = window.console;\n if (console && console.error) {\n console.error('PDF.JS required.');\n }\n return false;\n }\n kendo.pdfviewer.pdfjs.lib = window.pdfjsLib;\n return true;\n };\n extend(kendo, {\n pdfviewer: {\n pdfjs: {\n lib: window.pdfjsLib,\n isLoaded: isLoaded\n }\n }\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('pdfviewer/processors/pdfjs-processor', ['pdfviewer/pdfjs'], f);\n}(function () {\n var __meta__ = {\n id: 'pdfjs-processor',\n name: 'PDFJS-Processor',\n category: 'framework',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, Class = kendo.Class, extend = $.extend, atob = window.atob, PDFJS;\n var PDFJSProcessor = Class.extend({\n init: function (options, viewer) {\n var that = this;\n if (kendo.pdfviewer.pdfjs.isLoaded()) {\n PDFJS = kendo.pdfviewer.pdfjs.lib;\n }\n that.file = options.file;\n that.viewer = viewer;\n },\n fetchDocument: function () {\n var that = this, deferred = $.Deferred(), messages = that.viewer.options.messages.errorMessages;\n if (!that.file) {\n return deferred.resolve();\n }\n if (that._isBase64Data() && atob) {\n that.file.data = atob(that.file.data);\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 pdf.getData().then(function (data) {\n var blob = new Blob([data], { type: 'application/pdf' });\n that._downloadData.resolve({ file: blob });\n });\n for (var i = 1; i <= pdf.numPages; i++) {\n that.pagePromises.push(pdf.getPage(i));\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 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 }).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 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 that._downloadData.done(function (result) {\n kendo.ui.progress(that.viewer.pageContainer, false);\n var reader = new FileReader();\n reader.readAsDataURL(result.file);\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 this.file = file;\n },\n _isBase64Data: function () {\n var data = this.file.data, notBase64 = /[^A-Z0-9+\\/=]/i, length = data && data.length, equalSign;\n if (!length || length % 4 !== 0 || notBase64.test(data)) {\n return false;\n }\n equalSign = data.indexOf('=');\n return equalSign === -1 || equalSign === length - 1 || equalSign === length - 2 && data[length - 1] === '=';\n },\n renderTextLayer: function (params) {\n PDFJS.renderTextLayer(params);\n }\n });\n extend(kendo.pdfviewer.pdfjs, { processor: PDFJSProcessor });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('pdfviewer/processors/dpl-processor', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'dpl-processor',\n name: 'DPL-Processor',\n category: 'framework',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, extend = $.extend, Class = kendo.Class;\n var DPLProcessor = Class.extend({\n init: function (options, viewer) {\n var that = this;\n that.options = options;\n that.read = options.read;\n that.upload = options.upload;\n that.download = options.download;\n that.viewer = viewer;\n },\n fetchDocument: function () {\n var that = this, deferred = $.Deferred(), errorMessages = that.viewer.options.messages.errorMessages;\n if (!that.read) {\n return deferred.resolve();\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 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 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 return deferred;\n },\n downloadFile: function (fileName) {\n window.location = this.download.url + '?file=' + fileName;\n },\n fromJSON: function (json) {\n var viewer = this.viewer;\n viewer._clearPages();\n viewer.document = json;\n viewer.document.total = viewer.document.pages.length;\n viewer._renderPages();\n viewer.resize(true);\n viewer.activatePage(1);\n }\n });\n extend(kendo.pdfviewer, { dpl: { processor: DPLProcessor } });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('pdfviewer/pager', ['kendo.core'], f);\n}(function () {\n (function ($, undefined) {\n var NS = '.kendoPDFViewer', Widget = kendo.ui.Widget, CHANGE = 'change', KEYDOWN = 'keydown', CLICK = kendo.support.click, SHRINKWIDTH = 480, kendoAttr = kendo.attr, proxy = $.proxy, extend = $.extend, DOT = '.', ARIA_DISABLED = 'aria-disabled';\n var pagerStyles = {\n wrapperClass: 'k-pager-wrap',\n iconFirst: 'k-i-arrow-end-left',\n iconLast: 'k-i-arrow-end-right',\n iconPrev: 'k-i-arrow-60-left',\n iconNext: 'k-i-arrow-60-right',\n first: 'k-pager-first',\n last: 'k-pager-last',\n nav: 'k-pager-nav',\n disabled: 'k-state-disabled'\n };\n var Pager = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n that.linkTemplate = kendo.template(that.options.linkTemplate);\n that.element.addClass(pagerStyles.wrapperClass);\n that._renderLinks();\n that._toggleDisabledClass();\n that._attachEvents();\n },\n options: {\n linkTemplate: '',\n previousNext: true,\n input: true,\n page: 1,\n total: 1,\n messages: {}\n },\n events: [CHANGE],\n _pagerLink: function (iconClass, text, pageIdx, wrapClass) {\n return this.linkTemplate({\n iconClass: iconClass,\n text: text,\n wrapClass: wrapClass || '',\n pageIdx: pageIdx\n });\n },\n _renderLinks: function () {\n var that = this, options = that.options;\n if (options.previousNext) {\n that.firstLink = $(that._pagerLink(pagerStyles.iconFirst, options.messages.first, 1, pagerStyles.first));\n that.prevLink = $(that._pagerLink(pagerStyles.iconPrev, options.messages.previous, options.page - 1));\n that.nextLink = $(that._pagerLink(pagerStyles.iconNext, options.messages.next, options.page + 1));\n that.lastLink = $(that._pagerLink(pagerStyles.iconLast, options.messages.last, options.total, pagerStyles.last));\n }\n that.element.append(that.firstLink);\n that.element.append(that.prevLink);\n if (options.input) {\n that._renderInput();\n }\n that.element.append(that.nextLink);\n that.element.append(that.lastLink);\n },\n _toggleDisabledClass: function () {\n var that = this, options = that.options, total = !options.total;\n if (that.nextLink && that.prevLink) {\n that.prevLink.toggleClass(pagerStyles.disabled, total || options.page === 1);\n that.nextLink.toggleClass(pagerStyles.disabled, total || options.page === options.total);\n that.lastLink.toggleClass(pagerStyles.disabled, total || options.page === options.total);\n that.firstLink.toggleClass(pagerStyles.disabled, total || options.page === 1);\n that.prevLink.attr(ARIA_DISABLED, total || options.page === 1);\n that.firstLink.attr(ARIA_DISABLED, total || options.page === 1);\n that.nextLink.attr(ARIA_DISABLED, options.page === options.total);\n that.lastLink.attr(ARIA_DISABLED, options.page === options.total);\n }\n if (that.input) {\n that.input.toggleClass(pagerStyles.disabled, options.total <= 1);\n that.input.attr(ARIA_DISABLED, options.total <= 1);\n }\n },\n _attachEvents: function () {\n var that = this;\n that.element.on(CLICK + NS, DOT + pagerStyles.nav, proxy(that._click, that));\n that.element.on(KEYDOWN + NS, DOT + pagerStyles.nav, function (e) {\n if (e.keyCode === kendo.keys.ENTER) {\n that._click(e);\n e.preventDefault();\n }\n });\n if (that.input) {\n that.input.on(KEYDOWN + NS, proxy(that._keydown, that));\n }\n },\n _click: function (e) {\n var target = $(e.currentTarget);\n var page = parseInt(target.attr(kendoAttr('page')), 10);\n if (e.isDefaultPrevented()) {\n return;\n }\n this._change(page);\n },\n _keydown: function (e) {\n var key = e.keyCode, keys = kendo.keys, input = $(e.target), page = parseInt(input.val(), 10), upDown = key === keys.UP || key === keys.DOWN, allowedKeys = key === keys.RIGHT || key === keys.LEFT || key === keys.BACKSPACE || key === keys.DELETE, direction = upDown && key === keys.UP ? 1 : -1;\n if (upDown) {\n page += direction;\n }\n if (key === keys.ENTER || upDown) {\n if (isNaN(page) || page < 1 || page > this.options.total) {\n page = this.options.page;\n input.val(page);\n return;\n }\n this._change(page);\n e.preventDefault();\n } else if (!e.key.match(/^\\d+$/) && !allowedKeys) {\n e.preventDefault();\n }\n },\n _change: function (page) {\n var that = this;\n if (page >= 1 && page <= that.options.total) {\n that.options.page = page;\n if (that.input) {\n that.input.val(page);\n }\n that.prevLink.attr(kendoAttr('page'), page - 1);\n that.nextLink.attr(kendoAttr('page'), page + 1);\n that._toggleDisabledClass();\n }\n that.trigger(CHANGE, { page: page });\n },\n setOptions: function (options) {\n var that = this, prevTotal = that.options.total;\n options = $.extend(that.options, options);\n Widget.fn.setOptions.call(that, options);\n if (options.input) {\n if (prevTotal != options.total) {\n that._renderInput();\n that.input.on(KEYDOWN + NS, proxy(that._keydown, that));\n } else {\n that.input.val(options.total > 0 ? options.page : 1);\n }\n }\n if (options.total > 1) {\n that.prevLink.attr(kendoAttr('page'), options.page - 1);\n that.nextLink.attr(kendoAttr('page'), options.page + 1);\n that.lastLink.attr(kendoAttr('page'), options.total);\n }\n that._toggleDisabledClass();\n },\n _renderInput: function () {\n var that = this, totalMessage, options = that.options, shouldShrink = that.element.parent().width() <= SHRINKWIDTH, inputTemplate, pagerInputWrap = that.element.find('.k-pager-input');\n if (that.input) {\n that.input.off(NS);\n }\n totalMessage = options.total > 0 ? kendo.format(options.messages.of, options.total) : '';\n if (!shouldShrink) {\n totalMessage += options.total > 1 ? options.messages.pages : options.messages.page;\n }\n inputTemplate = '' + totalMessage;\n if (pagerInputWrap.length) {\n pagerInputWrap.html(inputTemplate);\n } else {\n that.element.append('' + inputTemplate + '');\n }\n that.input = that.element.find('input').val(options.total > 0 ? options.page : 1);\n },\n destroy: function () {\n this.element.off(NS);\n if (this.input) {\n this.input.off(NS);\n }\n Widget.fn.destroy.call(this);\n }\n });\n extend(kendo.pdfviewer, { Pager: Pager });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('pdfviewer/toolbar', [\n 'kendo.toolbar',\n 'kendo.combobox',\n 'pdfviewer/pager'\n ], f);\n}(function () {\n (function ($, undefined) {\n var kendo = window.kendo, extend = $.extend, proxy = $.proxy, ACTION = 'action', FLATBUTTONCLASS = 'k-flat', KEYDOWN = 'keydown', CLICK = kendo.support.click, CHANGE = 'change', ZOOMIN = 'zoomin', ZOOMOUT = 'zoomout', Item = kendo.toolbar.Item, ToolBar = kendo.ui.ToolBar, PREDEFINED_ZOOM_VALUES = {\n auto: 'auto',\n actual: 'actual',\n fitToWidth: 'fitToWidth',\n fitToPage: 'fitToPage'\n }, styles = {\n zoomOutIcon: 'k-i-zoom-out',\n zoomInIcon: 'k-i-zoom-in',\n zoomButtons: 'k-button-icon k-flat',\n zoomOverflowButtons: 'k-button-icontext k-overflow-button',\n overflowHidden: 'k-overflow-hidden'\n };\n var ZOOM_BUTTON_TEMPLATE = kendo.template(' ${showText ? text : \"\"}');\n var ZOOM_COMBOBOX_TEMPLATE = kendo.template('');\n var DefaultTools = {\n pager: {\n type: 'pager',\n overflow: 'never',\n command: 'PageChangeCommand'\n },\n spacer: { type: 'spacer' },\n zoom: {\n type: 'zoom',\n command: 'ZoomCommand',\n zoomInOut: true,\n combobox: {\n zoomLevels: [\n 50,\n 100,\n 150,\n 200,\n 300,\n 400\n ]\n },\n enable: false\n },\n toggleSelection: {\n type: 'buttonGroup',\n attributes: { 'class': 'k-toggle-selection-group' },\n buttons: [\n {\n togglable: true,\n text: 'Enable Selection',\n command: 'EnableSelectionCommand',\n icon: 'cursor',\n showText: 'overflow',\n name: 'toggleSelection',\n group: 'toggle-pan'\n },\n {\n togglable: true,\n text: 'Enable Panning',\n command: 'EnablePanCommand',\n icon: 'hand',\n showText: 'overflow',\n name: 'togglePan',\n group: 'toggle-pan',\n selected: true\n }\n ]\n },\n spacer2: { type: 'spacer' },\n search: {\n type: 'button',\n text: 'Search',\n command: 'OpenSearchCommand',\n icon: 'search',\n name: 'search',\n showText: 'overflow',\n enable: false\n },\n open: {\n type: 'button',\n text: 'Open',\n showText: 'overflow',\n name: 'open',\n icon: 'folder-open',\n command: 'OpenCommand'\n },\n download: {\n type: 'button',\n text: 'Download',\n showText: 'overflow',\n name: 'download',\n icon: 'download',\n command: 'DownloadCommand',\n enable: false\n },\n print: {\n type: 'button',\n text: 'Print',\n showText: 'overflow',\n name: 'print',\n icon: 'print',\n command: 'PrintCommand',\n enable: false\n }\n };\n var AllTools = extend({}, DefaultTools, {\n exportAs: {\n type: 'button',\n text: 'Export',\n showText: 'overflow',\n name: 'exportAs',\n icon: 'image-export',\n command: 'ExportCommand'\n }\n });\n var ToolbarPager = Item.extend({\n init: function (options, toolbar) {\n var pagerElement = $('
');\n this.options = extend(true, options, toolbar.options.pager);\n this.toolbar = toolbar;\n this.toolbar.pager = new kendo.pdfviewer.Pager(pagerElement, extend({}, options, { change: proxy(this._change, this) }));\n this.element = pagerElement;\n this.element.on(KEYDOWN, proxy(this._keydown, this));\n this.attributes();\n this.addUidAttr();\n this.addOverflowAttr();\n },\n _change: function (e) {\n if (this.options.change && this.options.change(e.page)) {\n return;\n }\n this.toolbar.action({\n command: 'PageChangeCommand',\n options: { value: e.page }\n });\n },\n _keydown: function (e) {\n var that = this, target = $(e.target), keyCode = e.keyCode, children = that.element.find(':kendoFocusable'), targetIndex = children.index(target), direction = e.shiftKey ? -1 : 1;\n if (keyCode === kendo.keys.TAB && children[targetIndex + direction]) {\n children[targetIndex + direction].focus();\n e.preventDefault();\n e.stopPropagation();\n }\n }\n });\n kendo.toolbar.registerComponent('pager', ToolbarPager);\n function appendZoomButtons(element, messages, isOverflow) {\n var className = isOverflow ? styles.zoomOverflowButtons : styles.zoomButtons;\n element.append(ZOOM_BUTTON_TEMPLATE({\n text: messages.zoomOut,\n command: ZOOMOUT,\n iconClass: styles.zoomOutIcon,\n showText: isOverflow,\n className: className\n }));\n element.append(ZOOM_BUTTON_TEMPLATE({\n text: messages.zoomIn,\n command: ZOOMIN,\n iconClass: styles.zoomInIcon,\n showText: isOverflow,\n className: className\n }));\n }\n var ToolBarZoom = Item.extend({\n init: function (options, toolbar) {\n this._init(options, toolbar);\n this.toolbar.zoom = this;\n if (toolbar.options.scale) {\n this._initValue = toolbar.options.scale * 100 + '%';\n }\n this._appendElements();\n this._click = kendo.throttle(this._click.bind(this), 200);\n this._keydown = kendo.throttle(this._keydown.bind(this), 200);\n this.element.on(CLICK, '.k-button', this._click);\n this.element.on(KEYDOWN, '.k-button', this._keydown);\n this.attributes();\n this.addUidAttr();\n this.addOverflowAttr();\n this.enable(options.enable);\n },\n _init: function (options, toolbar) {\n var zoomElement = $('
');\n this.options = extend(true, options, { messages: toolbar.options.messages.zoom });\n this.toolbar = toolbar;\n this.element = zoomElement;\n },\n _appendElements: function () {\n var options = this.options;\n if (options.zoomInOut) {\n appendZoomButtons(this.element, options.messages, false);\n }\n if (options.combobox) {\n this._buildComboBox();\n }\n },\n _buildComboBox: function () {\n var that = this, combobox, messages = that.options.messages, comboOptions = that.options.combobox, zoomLevels = [\n {\n percent: PREDEFINED_ZOOM_VALUES.auto,\n text: messages.autoWidth\n },\n {\n percent: PREDEFINED_ZOOM_VALUES.actual,\n text: messages.actualWidth\n },\n {\n percent: PREDEFINED_ZOOM_VALUES.fitToWidth,\n text: messages.fitToWidth\n },\n {\n percent: PREDEFINED_ZOOM_VALUES.fitToPage,\n text: messages.fitToPage\n }\n ];\n zoomLevels = zoomLevels.concat(comboOptions.zoomLevels);\n combobox = $(ZOOM_COMBOBOX_TEMPLATE({\n zoomLevels: zoomLevels,\n zoomLevel: messages.zoomLevel\n }));\n if (!kendo.support.mobileOS) {\n combobox = combobox.kendoComboBox(extend({\n autoWidth: true,\n clearButton: false,\n value: that._initValue\n }, comboOptions)).getKendoComboBox();\n that.element.append(combobox.wrapper);\n that.combobox = combobox;\n that._currentValue = combobox.value();\n } else {\n that.element.append(combobox);\n }\n combobox.bind(CHANGE, kendo.throttle(that.change.bind(that), 300));\n },\n change: function (e) {\n var value = e.sender ? e.sender.value() : e.target.value, parsedValue;\n if (value.toString().match(/^[0-9]+%?$/)) {\n parsedValue = parseInt(value.replace('%', ''), 10) / 100;\n } else if (!PREDEFINED_ZOOM_VALUES[value]) {\n if (this.combobox) {\n this.combobox.value(this._currentValue);\n }\n e.preventDefault();\n return;\n }\n this._currentValue = value;\n this.toolbar.action({\n command: 'ZoomCommand',\n options: { scale: parsedValue || value }\n });\n },\n _buttonCommand: function (target) {\n var button = $(target).closest('.k-button'), command = button.data('command');\n this.toolbar.action({\n command: 'ZoomCommand',\n options: {\n zoomIn: command === ZOOMIN,\n zoomOut: command === ZOOMOUT,\n updateComboBox: true\n }\n });\n },\n _click: function (e) {\n this._buttonCommand(e.target);\n },\n _keydown: function (e) {\n var key = e.keyCode, keys = kendo.keys;\n if (key === keys.ENTER) {\n this._buttonCommand(e.target);\n e.preventDefault();\n }\n },\n enable: function (value) {\n var element = this.element;\n element.find('.k-button, select').toggleClass('k-state-disabled', !value);\n if (this.combobox) {\n this.combobox.enable(value);\n }\n },\n destroy: function () {\n if (this.combobox) {\n this.combobox.destroy();\n }\n }\n });\n var ToolBarOverflowZoom = ToolBarZoom.extend({\n _init: function (options, toolbar) {\n var zoomElement = $('
  • ');\n this.options = extend(true, options, { messages: toolbar.options.messages.zoom });\n this.toolbar = toolbar;\n this.element = zoomElement;\n },\n _appendElements: function () {\n var options = this.options;\n if (options.zoomInOut) {\n appendZoomButtons(this.element, options.messages, true);\n }\n },\n overflowHidden: function () {\n this.element.addClass(styles.overflowHidden);\n }\n });\n kendo.toolbar.registerComponent('zoom', ToolBarZoom, ToolBarOverflowZoom);\n var ViewerToolBar = ToolBar.extend({\n init: function (element, options) {\n var that = this;\n var items = options.items && options.items.length ? options.items : Object.keys(DefaultTools);\n that.options = options;\n options.items = that._updateItems(items);\n ToolBar.fn.init.call(that, element, options);\n that.bind({\n click: that._click,\n toggle: that._click\n });\n options.viewer.bind({ update: that._update.bind(that) });\n },\n events: [ACTION],\n _updateItems: function (items) {\n var that = this;\n var messages = this.options.messages;\n return items.map(function (tool) {\n var isBuiltInTool = $.isPlainObject(tool) && Object.keys(tool).length === 1 && tool.name;\n tool = isBuiltInTool ? tool.name : tool;\n var toolOptions = $.isPlainObject(tool) ? tool : AllTools[tool];\n var options;\n var toolName = toolOptions.name;\n if (toolOptions.type === 'buttonGroup') {\n toolOptions.buttons = that._updateItems(toolOptions.buttons);\n } else if (toolOptions.type !== 'pager') {\n options = {\n name: toolName,\n attributes: {\n 'aria-label': messages[toolName],\n 'title': messages[toolName],\n 'data-command': toolOptions.command,\n 'class': FLATBUTTONCLASS\n },\n overflow: toolOptions.overflow\n };\n } else {\n options = { overflow: 'never' };\n }\n kendo.deepExtend(toolOptions, options);\n return toolOptions;\n });\n },\n _click: function (e) {\n var command = $(e.target).data('command');\n if (!command) {\n return;\n }\n this.action({\n command: command,\n options: e.options\n });\n },\n _update: function (e) {\n var pageOptions = {\n page: e.page || 1,\n total: e.total || 1\n };\n if (this.zoom) {\n this.zoom.enable(!e.isBlank);\n if (e.action === 'zoom') {\n this._updateZoomComboBox(e.zoom);\n }\n }\n if ((e.action === 'pagechange' || e.isBlank) && this.pager) {\n this.pager.setOptions(pageOptions);\n }\n this.enable(this.wrapper.find('.k-toggle-selection-group'), !e.isBlank);\n this.enable(this.wrapper.find('[data-command=\\'OpenSearchCommand\\']'), !e.isBlank);\n this.enable(this.wrapper.find('[data-command=\\'DownloadCommand\\']'), !e.isBlank);\n this.enable(this.wrapper.find('[data-command=\\'PrintCommand\\']'), !e.isBlank);\n },\n _updateZoomComboBox: function (value) {\n var isPredefined = value === PREDEFINED_ZOOM_VALUES.auto || value === PREDEFINED_ZOOM_VALUES.actual;\n if (!isPredefined) {\n value = Math.round(value * 100) + '%';\n }\n if (this.zoom && this.zoom.combobox) {\n this.zoom._currentValue = value;\n this.zoom.combobox.value(value);\n }\n },\n action: function (args) {\n this.trigger(ACTION, args);\n },\n destroy: function () {\n if (this.pager) {\n this.pager.destroy();\n }\n if (this.zoom) {\n this.zoom.destroy();\n }\n ToolBar.fn.destroy.call(this);\n }\n });\n extend(kendo.pdfviewer, {\n Toolbar: ViewerToolBar,\n DefaultTools: DefaultTools\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('util/text-metrics', ['kendo.core'], f);\n}(function () {\n (function ($) {\n window.kendo.util = window.kendo.util || {};\n var LRUCache = kendo.Class.extend({\n init: function (size) {\n this._size = size;\n this._length = 0;\n this._map = {};\n },\n put: function (key, value) {\n var map = this._map;\n var entry = {\n key: key,\n value: value\n };\n map[key] = entry;\n if (!this._head) {\n this._head = this._tail = entry;\n } else {\n this._tail.newer = entry;\n entry.older = this._tail;\n this._tail = entry;\n }\n if (this._length >= this._size) {\n map[this._head.key] = null;\n this._head = this._head.newer;\n this._head.older = null;\n } else {\n this._length++;\n }\n },\n get: function (key) {\n var entry = this._map[key];\n if (entry) {\n if (entry === this._head && entry !== this._tail) {\n this._head = entry.newer;\n this._head.older = null;\n }\n if (entry !== this._tail) {\n if (entry.older) {\n entry.older.newer = entry.newer;\n entry.newer.older = entry.older;\n }\n entry.older = this._tail;\n entry.newer = null;\n this._tail.newer = entry;\n this._tail = entry;\n }\n return entry.value;\n }\n }\n });\n var REPLACE_REGEX = /\\r?\\n|\\r|\\t/g;\n var SPACE = ' ';\n function normalizeText(text) {\n return String(text).replace(REPLACE_REGEX, SPACE);\n }\n function objectKey(object) {\n var parts = [];\n for (var key in object) {\n parts.push(key + object[key]);\n }\n return parts.sort().join('');\n }\n function hashKey(str) {\n var hash = 2166136261;\n for (var i = 0; i < str.length; ++i) {\n hash += (hash << 1) + (hash << 4) + (hash << 7) + (hash << 8) + (hash << 24);\n hash ^= str.charCodeAt(i);\n }\n return hash >>> 0;\n }\n function zeroSize() {\n return {\n width: 0,\n height: 0,\n baseline: 0\n };\n }\n var DEFAULT_OPTIONS = { baselineMarkerSize: 1 };\n var defaultMeasureBox;\n if (typeof document !== 'undefined') {\n defaultMeasureBox = document.createElement('div');\n defaultMeasureBox.style.cssText = 'position: absolute !important; top: -4000px !important; width: auto !important; height: auto !important;' + 'padding: 0 !important; margin: 0 !important; border: 0 !important;' + 'line-height: normal !important; visibility: hidden !important; white-space: pre!important;';\n }\n var TextMetrics = kendo.Class.extend({\n init: function (options) {\n this._cache = new LRUCache(1000);\n this.options = $.extend({}, DEFAULT_OPTIONS, options);\n },\n measure: function (text, style, options) {\n if (options === void 0) {\n options = {};\n }\n if (typeof text === 'undefined' || text === null) {\n return zeroSize();\n }\n var styleKey = objectKey(style);\n var cacheKey = hashKey(text + styleKey);\n var cachedResult = this._cache.get(cacheKey);\n if (cachedResult) {\n return cachedResult;\n }\n var size = zeroSize();\n var measureBox = options.box || defaultMeasureBox;\n var baselineMarker = this._baselineMarker().cloneNode(false);\n for (var key in style) {\n var value = style[key];\n if (typeof value !== 'undefined') {\n measureBox.style[key] = value;\n }\n }\n var textStr = options.normalizeText !== false ? normalizeText(text) : String(text);\n measureBox.textContent = textStr;\n measureBox.appendChild(baselineMarker);\n document.body.appendChild(measureBox);\n if (textStr.length) {\n size.width = measureBox.offsetWidth - this.options.baselineMarkerSize;\n size.height = measureBox.offsetHeight;\n size.baseline = baselineMarker.offsetTop + this.options.baselineMarkerSize;\n }\n if (size.width > 0 && size.height > 0) {\n this._cache.put(cacheKey, size);\n }\n measureBox.parentNode.removeChild(measureBox);\n return size;\n },\n _baselineMarker: function () {\n var marker = document.createElement('div');\n marker.style.cssText = 'display: inline-block; vertical-align: baseline;width: ' + this.options.baselineMarkerSize + 'px; height: ' + this.options.baselineMarkerSize + 'px;overflow: hidden;';\n return marker;\n }\n });\n TextMetrics.current = new TextMetrics();\n function measureText(text, style, measureBox) {\n return TextMetrics.current.measure(text, style, measureBox);\n }\n kendo.deepExtend(kendo.util, {\n LRUCache: LRUCache,\n TextMetrics: TextMetrics,\n measureText: measureText,\n objectKey: objectKey,\n hashKey: hashKey,\n normalizeText: normalizeText\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('pdfviewer/page', ['kendo.drawing'], f);\n}(function () {\n (function ($, undefined) {\n var extend = $.extend, noop = $.noop, drawing = kendo.drawing, Group = drawing.Group, Surface = drawing.Surface, RENDER = 'render', Class = kendo.Class;\n var geometryTypes = {\n Path: 'path',\n MultiPath: 'multipath',\n Rect: 'rect',\n Image: 'image',\n Text: 'text'\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 this.element = $('
    ');\n this.element.attr(kendo.attr('number'), this.pageNumber);\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 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.width(size.width).height(size.height);\n },\n destroy: function () {\n kendo.destroy(this.element);\n },\n render: noop\n });\n var DPLPage = Page.extend({\n draw: function () {\n var that = this, geometries = that.options.geometries;\n that.group = new Group();\n that.surface.draw(that.group);\n that._drawGeometries(geometries);\n that.viewer.trigger(RENDER, { page: this });\n kendo.ui.progress(that.element, false);\n },\n load: function () {\n var that = this;\n if (that.loaded || !that.processor) {\n return;\n }\n that.processor.fetchPageData(that.pageNumber).then(function (data) {\n that.options = data;\n that._initSurface();\n that.draw();\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({\n width: this.width,\n height: this.height\n }, 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, kGeometry;\n if (!geometries) {\n return;\n }\n for (var i = 0; i <= geometries.length; i++) {\n var geometry = geometries[i];\n if (!geometry) {\n continue;\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 if (kGeometry) {\n that.group.append(kGeometry);\n }\n }\n },\n _drawRect: function (geometry) {\n var rectGeo = new kendo.geometry.Rect(geometry.point, geometry.size);\n return new drawing.Rect(rectGeo, {\n transform: this._getMatrix(geometry.transform),\n fill: geometry.fillOptions,\n stroke: geometry.strokeOptions\n });\n },\n _drawImage: function (geometry) {\n var imageRect = new kendo.geometry.Rect(geometry.point, geometry.size);\n return new drawing.Image(geometry.src, imageRect, { transform: this._getMatrix(geometry.transform) });\n },\n _drawText: function (geometry) {\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 _drawPath: function (geometry) {\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 for (var i = 0; i < geometry.paths.length; i++) {\n var subPath = geometry.paths[i];\n if (!subPath.segments) {\n return;\n }\n path.moveTo.apply(path, subPath.point);\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 if (subPath.closed) {\n path.close();\n }\n }\n return path;\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 var PDFJSPage = Page.extend({\n init: function (options, viewer) {\n var that = this, canvas;\n canvas = $('');\n that.canvas = canvas.get(0);\n Page.fn.init.call(that, options, viewer);\n that.canvas.width = that.width;\n that.canvas.height = that.height;\n that.element.append(canvas);\n },\n load: function (defaultScale, force) {\n var that = this, promise = $.Deferred();\n if (that._scale === defaultScale && !force) {\n return;\n } else if (that._scale && that._scale !== defaultScale && !force) {\n that._scale = defaultScale;\n that.render(defaultScale);\n return promise.resolve(that);\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 that._scale = defaultScale;\n that.loaded = true;\n return promise;\n },\n render: function (scale) {\n var that = this;\n var context = this.canvas.getContext('2d'), viewport = this._page.getViewport({ scale: scale });\n this._scale = scale;\n this.canvas.width = viewport.width;\n this.canvas.height = viewport.height;\n if (this._renderTask) {\n this._renderTask.cancel();\n this._renderTask = null;\n }\n this._updatePageSize({\n width: viewport.width,\n height: viewport.height\n });\n this._renderTask = this._page.render({\n canvasContext: context,\n viewport: viewport\n });\n this._renderTextLayer(viewport);\n return this._renderTask.promise.then(function () {\n that._renderTask = null;\n }).catch(function () {\n });\n },\n _renderTextLayer: function (viewport) {\n var that = this;\n var page = that._page;\n if (that.textLayer) {\n that.textLayer.remove();\n }\n that.textLayer = $('
    ').get(0);\n that.element.append(that.textLayer);\n page.getTextContent({ normalizeWhitespace: true }).then(function (textContent) {\n $(that.textLayer).css({\n height: viewport.height,\n width: viewport.width\n }).html('');\n var params = {\n textContent: textContent,\n container: that.textLayer,\n viewport: viewport,\n textDivs: [],\n enhanceTextSelection: true\n };\n that.processor.renderTextLayer(params);\n });\n }\n });\n extend(kendo.pdfviewer.dpl, {\n geometryTypes: geometryTypes,\n Page: DPLPage\n });\n extend(kendo.pdfviewer.pdfjs, { Page: PDFJSPage });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('pdfviewer/search', ['kendo.core'], f);\n}(function () {\n (function ($, undefined) {\n var Class = kendo.Class, extend = $.extend, isArray = $.isArray;\n var SearchDOM = Class.extend({\n init: function (options) {\n var that = this;\n that.options = extend({}, that.options, options);\n that.processDom();\n },\n options: {\n highlightClass: 'k-search-highlight',\n charClass: 'k-text-char'\n },\n processDom: function () {\n var that = this;\n that.targets = isArray(that.options.target) ? that.options.target : [that.options.target];\n that.textNodes = [];\n that.charIndex = 0;\n that.text = '';\n that.targets.forEach(function (target) {\n that.traverseToTextNode(target);\n });\n for (var i = 0; i < that.textNodes.length; i++) {\n that.processTextNode(that.textNodes[i]);\n }\n },\n traverseToTextNode: function (node) {\n var that = this;\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 processTextNode: function (node) {\n var that = this;\n var text = node.textContent;\n var span;\n that.text = that.text + text;\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 splitChars: function (span, text) {\n var that = this;\n var newHtml = '';\n for (var i = 0; i < text.length; i++) {\n newHtml = newHtml + '' + text[i] + '';\n that.charIndex++;\n }\n span.innerHTML = newHtml;\n },\n search: function (value, matchCase) {\n var that = this;\n var expression = new RegExp(value, !matchCase ? 'gi' : 'g');\n var match;\n that.matches = [];\n that.resetMark();\n that.resetHighlight();\n that.resetMatchIndex();\n if (value === '') {\n return;\n }\n match = expression.exec(that.text);\n while (match) {\n that.matches.push({\n startOffset: match.index,\n endOffset: match.index + match[0].length\n });\n match = expression.exec(that.text);\n }\n that.highlightAll();\n that.mark();\n },\n highlightAll: function () {\n var that = this;\n that.matches.forEach(function (match, index) {\n var start = match.startOffset;\n var end = match.endOffset;\n that.highlight(start, end, index + 1);\n });\n },\n highlight: function (start, end, matchIndex) {\n var that = this;\n for (var i = start; i < end; i++) {\n $(that.targets).find('.' + that.options.charClass + '[' + kendo.attr('char-index') + '=' + i + ']').addClass(that.options.highlightClass).attr(kendo.attr('match-index'), matchIndex);\n }\n },\n resetHighlight: function () {\n var that = this;\n $(that.targets).find('.' + that.options.highlightClass).removeClass(that.options.highlightClass);\n },\n resetMatchIndex: function () {\n var that = this;\n $(that.targets).find('.' + that.options.charClass + '[' + kendo.attr('match-index') + ']').removeAttr(kendo.attr('match-index'));\n },\n mark: function () {\n var that = this;\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 $(that.targets).find('.' + that.options.charClass + '[' + kendo.attr('match-index') + '=' + that.currentIndex + ']').wrapInner('');\n },\n resetMark: function () {\n var that = this;\n $(that.targets).find('mark').contents().unwrap();\n },\n nextMatch: function () {\n var that = this;\n that.currentIndex++;\n if (that.currentIndex > that.matches.length) {\n that.currentIndex = 1;\n }\n that.mark();\n },\n previousMatch: function () {\n var that = this;\n that.currentIndex--;\n if (that.currentIndex < 1) {\n that.currentIndex = that.matches.length;\n }\n that.mark();\n },\n getMarkedIndex: function () {\n return this.matches.length ? this.currentIndex : 0;\n },\n getFirstMarked: function () {\n return $(this.targets).find('mark').eq(0);\n },\n destroy: function () {\n var that = this;\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 extend(kendo.pdfviewer, { SearchDOM: SearchDOM });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('pdfviewer/dialogs', [\n 'kendo.dialog',\n 'kendo.window',\n 'kendo.binder',\n 'kendo.numerictextbox',\n 'kendo.dropdownlist'\n ], f);\n}(function () {\n (function ($, undefined) {\n var kendo = window.kendo, extend = $.extend, Class = kendo.Class, EXTENSIONS = {\n svg: '.svg',\n png: '.png'\n }, keys = kendo.keys;\n var ErrorDialog = Class.extend({\n init: function (options) {\n this.options = extend(options, { actions: [{ text: options.messages.dialogs.okText }] });\n this._dialog = $('
    ').kendoDialog(this.options).getKendoDialog();\n },\n open: function () {\n this._dialog.center().open();\n }\n });\n var ExportAsDialog = Class.extend({\n init: function (options) {\n this.options = extend(options, this.options, {\n fileFormats: [\n {\n description: options.messages.dialogs.exportAsDialog.png,\n extension: EXTENSIONS.png\n },\n {\n description: options.messages.dialogs.exportAsDialog.svg,\n extension: EXTENSIONS.svg\n }\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: { preventScroll: true },\n width: '90%',\n maxWidth: 520,\n template: '
    ' + '
    ' + '' + '
    ' + '
    ' + '
    ' + '
    ' + '' + '
    ' + '
    ' + '
    ' + '
    ' + '' + '
    ' + '
    ' + '' + '' + '
    '\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 = $('
    ').append(kendo.template(options.template)({\n total: options.pagesCount,\n messages: dialogMessages\n })).kendoWindow(options).getKendoWindow();\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 that._dialog = dialog;\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 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: '
    ' + '' + '' + '' + '' + '' + ' #: messages.of # ' + '' + '' + '' + '
    '\n },\n open: function () {\n var that = this;\n if (!that.dialog) {\n that._initializeDialog();\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({ messages: that.options.messages }));\n var dialogOffset = {\n top: that.options.position.top + 16,\n left: that.options.position.left + 16\n };\n that.dialog = new kendo.ui.Window(dialogElm, extend({}, that.options, {\n autoFocus: false,\n title: false,\n position: {\n top: dialogOffset.top,\n left: dialogOffset.left\n },\n minHeight: 30,\n draggable: { dragHandle: '.k-search-dialog-draghandle' },\n activate: function (ev) {\n ev.sender.element.find('.k-search-dialog-input').focus();\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 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 kendo.bind(that.dialog.element, that.searchModel);\n }\n });\n extend(kendo.pdfviewer, {\n dialogs: {\n ErrorDialog: ErrorDialog,\n ExportAsDialog: ExportAsDialog,\n SearchDialog: SearchDialog\n }\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('pdfviewer/commands', ['kendo.upload'], f);\n}(function () {\n (function ($, undefined) {\n var kendo = window.kendo, proxy = $.proxy, extend = $.extend, parseJSON = $.parseJSON, progress = kendo.ui.progress, Class = kendo.Class, OPEN = 'open', ZOOMSTART = 'zoomStart', ZOOMEND = 'zoomEnd';\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 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: proxy(this._onSelect, this),\n success: proxy(this._onSuccess, this),\n error: proxy(this._onError, this),\n complete: proxy(this._onComplete, this),\n showFileList: false,\n multiple: false,\n validation: { allowedExtensions: ['.pdf'] }\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 var upload = $('').kendoUpload(uploadOptions).getKendoUpload();\n this.viewer._upload = upload;\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 if ($.isPlainObject(json)) {\n this.viewer.processor.fromJSON(json);\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 progress(that.viewer.pageContainer, true);\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 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 reader.readAsArrayBuffer(fileToUpload.rawFile);\n }\n });\n var PageChangeCommand = Command.extend({\n exec: function () {\n var pageNumber = this.options.value;\n this.viewer.activatePage(pageNumber);\n }\n });\n var DownloadCommand = Command.extend({\n exec: function () {\n if (!this.viewer.document) {\n this.viewer._triggerError({ message: this.errorMessages.notFound });\n return;\n }\n var fileName = this.viewer.document.info && this.viewer.document.info.title || this.viewer.options.messages.defaultFileName;\n this.viewer.processor.downloadFile(fileName);\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 dialog._updateModel({\n pagesCount: this.viewer.document && this.viewer.document.total || 1,\n page: this.viewer.options.page\n });\n dialog.open();\n },\n apply: function (viewModel) {\n var extension = viewModel.extension;\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 var EnableSelectionCommand = Command.extend({\n exec: function () {\n var that = this, viewer = that.viewer;\n viewer._toggleSelection(true);\n }\n });\n var EnablePanCommand = Command.extend({\n exec: function () {\n var that = this, viewer = that.viewer;\n viewer._toggleSelection(false);\n }\n });\n var OpenSearchCommand = Command.extend({\n init: function (options) {\n var that = this;\n that.viewer = options.viewer;\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: proxy(that._open, that),\n next: proxy(that._next, that),\n prev: proxy(that._prev, that),\n close: proxy(that._close, that)\n });\n }\n Command.fn.init.call(that, options);\n },\n exec: function () {\n var that = this;\n that.viewer.searchDialog.open();\n },\n _open: function () {\n var that = this;\n that.changeHandler = proxy(that._change, that);\n that.zoomStartHandler = proxy(that._closeDialog, that);\n that.openFileHandler = proxy(that._closeDialog, that);\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 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 },\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 if (!searchEngine) {\n return;\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 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 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 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 if (!marked.length) {\n return;\n }\n position = marked.offset().top - scroller.scrollElement.offset().top - 100;\n scroller.scrollTo(scroller.scrollLeft, position * -1);\n },\n _closeDialog: function () {\n var that = this;\n that.viewer.searchDialog.dialog.close();\n }\n });\n var ZoomCommand = Command.extend({\n exec: function () {\n var that = this, options = that.options, viewer = that.viewer, scale = options.scale, loadedPagesHeight = 0, page = that.viewer._pageNum, containerHeight = viewer.pageContainer[0].clientHeight, updatedVisiblePagesCount = 1, renderTasks = [];\n if (viewer.processingLib === 'dpl') {\n return;\n }\n scale = that._calculateZoom();\n var updateViewer = function () {\n var scroller = that.viewer._scroller, scrollingStarted = viewer._scrollingStarted;\n if (scroller && scroller.scrollTop > scroller.scrollHeight()) {\n scroller._resize();\n }\n if (!scrollingStarted) {\n viewer.activatePage(page);\n viewer._scrollingStarted = false;\n }\n };\n if (!scale) {\n return;\n }\n viewer.zoomScale = scale;\n viewer._scrollingStarted = false;\n if (viewer.pages) {\n viewer.pages.forEach(function (page) {\n var pageHeight;\n if (viewer._visiblePages.indexOf(page) !== -1 && page.loaded) {\n renderTasks.push(page.render(scale));\n pageHeight = page._page.getViewport({ scale: scale }).height;\n } else {\n page.resize(scale);\n pageHeight = page.element.height();\n }\n loadedPagesHeight += pageHeight;\n if (loadedPagesHeight <= containerHeight) {\n updatedVisiblePagesCount++;\n }\n });\n if (viewer._visiblePagesCount != updatedVisiblePagesCount) {\n viewer._visiblePagesCount = updatedVisiblePagesCount;\n viewer._loadVisiblePages();\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 _calculateZoom: function () {\n var options = this.options, viewer = this.viewer, viewerOptions = viewer.options, pageContainer = viewer.pageContainer, visibleCanvas = viewer._visiblePages && viewer._visiblePages[0].canvas, scale = options.scale, scaleValue = scale, preventZoom;\n viewer._allowResize = false;\n viewer._autoFit = false;\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 / viewer.zoomScale);\n } else if (scale === 'fitToPage') {\n viewer._allowResize = true;\n viewer._autoFit = 'fitToPage';\n scaleValue = pageContainer.height() / (visibleCanvas.height / viewer.zoomScale);\n }\n preventZoom = scale < viewerOptions.zoomMin || scale > viewerOptions.zoomMax;\n if (preventZoom || viewer.trigger(ZOOMSTART, { scale: scale })) {\n return;\n }\n if (options.updateComboBox && viewer.toolbar) {\n viewer.toolbar._updateZoomComboBox(scale);\n }\n return scaleValue;\n },\n _triggerZoomEnd: function (scale) {\n var that = this, viewer = that.viewer;\n viewer.trigger(ZOOMEND, { scale: scale });\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 if (!that.viewer.document) {\n that.viewer._triggerError({ message: this.errorMessages.notFound });\n return;\n }\n progress(that.viewer.pageContainer, true);\n that._renderPrintContainer();\n that._loadAllPages().then(proxy(that.processAfterRender, 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 that._originalScale = that.viewer.zoom();\n function getRenderPromise(page) {\n renderPromises.push(page._renderPromise);\n }\n for (var i = 0; i < pages.length; i++) {\n loadPromises.push(pages[i].load(3, true).then(getRenderPromise));\n }\n Promise.all(loadPromises).then(function () {\n promise.resolve(renderPromises);\n });\n return promise;\n },\n processAfterRender: function (renderPromises) {\n var that = this;\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 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 var img = '';\n div.append(img);\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 if (!myWindow) {\n that.viewer._triggerError({ message: that.errorMessages.popupBlocked });\n return;\n }\n myWindow.document.write(that.printContainer.html());\n myWindow.document.close();\n myWindow.focus();\n myWindow.print();\n myWindow.close();\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 }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.pdfviewer', [\n 'kendo.mobile.scroller',\n 'pdfviewer/processors/pdfjs-processor',\n 'pdfviewer/processors/dpl-processor',\n 'pdfviewer/toolbar',\n 'pdfviewer/page',\n 'pdfviewer/search',\n 'pdfviewer/dialogs',\n 'pdfviewer/commands'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'pdfviewer',\n name: 'PDFViewer',\n category: 'web',\n description: 'PDFViewer to display pdfs in the browser',\n depends: [\n 'core',\n 'window',\n 'dialog',\n 'toolbar',\n 'mobile.scroller',\n 'upload',\n 'combobox',\n 'drawing',\n 'binder',\n 'dropdownlist',\n 'numerictextbox'\n ]\n };\n (function ($, undefined) {\n var NS = '.kendoPDFViewer', kendo = window.kendo, ui = kendo.ui, proxy = $.proxy, extend = $.extend, drawing = kendo.drawing, keys = $.extend({\n PLUS: 187,\n MINUS: 189,\n ZERO: 48,\n NUMPAD_ZERO: 96\n }, kendo.keys), Page, Widget = ui.Widget, progress = kendo.ui.progress, SCROLL = 'scroll', RENDER = 'render', OPEN = 'open', ERROR = 'error', FOCUS = 'focus' + NS, KEYDOWN = 'keydown' + NS, MOUSEWHEEL = 'DOMMouseScroll' + NS + ' mousewheel' + NS, UPDATE = 'update', ZOOM_SCALE = 1.25, PAGE_CHANGE = 'pagechange', ZOOMSTART = 'zoomStart', ZOOMEND = 'zoomEnd', ZOOMCOMMAND = 'ZoomCommand', WHITECOLOR = '#ffffff', TABINDEX = 'tabindex', PROCESSORS = {\n pdfjs: 'pdfjs',\n dpl: 'dpl'\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 var PDFViewer = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, kendo.deepExtend({}, this.options, options));\n that._wrapper();\n if (that.options.toolbar) {\n that._renderToolbar();\n }\n that._initProcessor(options || {});\n that._renderPageContainer();\n that._loadDocument();\n that._tabindex();\n kendo.notify(that, kendo.ui);\n },\n events: [\n RENDER,\n OPEN,\n ERROR,\n ZOOMSTART,\n ZOOMEND\n ],\n options: {\n name: 'PDFViewer',\n view: { type: 'canvas' },\n pdfjsProcessing: { file: null },\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: { url: null },\n loadOnDemand: false\n },\n toolbar: { items: [] },\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 }\n }\n }\n },\n _wrapper: function () {\n var that = this, options = that.options;\n that.wrapper = that.element;\n that.wrapper.width(options.width).height(options.height).addClass(styles.viewer).on(FOCUS, proxy(that._focus, that)).on(KEYDOWN, proxy(that._keydown, that));\n that._allowResize = that.options.scale === null;\n that._autoZoomScale = ZOOM_SCALE;\n that.zoomScale = that.options.scale || that._autoZoomScale;\n that._resizeHandler = kendo.onResize(function () {\n that.resize();\n });\n that._pageNum = that.options.page;\n },\n _focus: function (e) {\n if (this.toolbar) {\n this.toolbar.wrapper.focus();\n } else {\n this.pageContainer.focus();\n }\n e.preventDefault();\n },\n _keydown: function (e) {\n var plusShortcuts = [\n keys.PLUS,\n keys.NUMPAD_PLUS\n ], minusShortcuts = [\n keys.MINUS,\n keys.NUMPAD_MINUS\n ], zeroShortcuts = [\n keys.ZERO,\n keys.NUMPAD_ZERO\n ], shouldExecute = false, args = {\n command: ZOOMCOMMAND,\n options: { updateComboBox: true }\n };\n if (!e.ctrlKey || this._blankPage || this.processingLib === PROCESSORS.dpl) {\n return;\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.scale = ZOOM_SCALE;\n shouldExecute = true;\n }\n if (shouldExecute) {\n this.execute(args);\n e.preventDefault();\n }\n },\n _initProcessor: function (options) {\n var that = this, processingOptions;\n processingOptions = options.dplProcessing ? that.options.dplProcessing : that.options.pdfjsProcessing;\n that.processingLib = options.dplProcessing ? PROCESSORS.dpl : PROCESSORS.pdfjs;\n that.processor = new kendo.pdfviewer[that.processingLib].processor(processingOptions, that);\n Page = kendo.pdfviewer[that.processingLib].Page;\n },\n _renderToolbar: function () {\n var that = this, options = that.options;\n var toolbarOptions = {\n pager: { messages: options.messages.toolbar.pager },\n scale: options.scale,\n resizable: true,\n items: options.toolbar.items,\n width: options.width,\n action: that.execute.bind(that),\n messages: options.messages.toolbar,\n viewer: this\n };\n var toolbarElement = $('
    ');\n toolbarElement.appendTo(that.element);\n that.toolbar = new kendo.pdfviewer.Toolbar(toolbarElement, toolbarOptions);\n },\n _initErrorDialog: function (options) {\n var that = this;\n if (!that._errorDialog) {\n options = extend(options, { messages: that.options.messages });\n var dialogInstance = new kendo.pdfviewer.dialogs.ErrorDialog(options);\n that._errorDialog = dialogInstance._dialog;\n }\n return that._errorDialog;\n },\n _renderPageContainer: function () {\n var that = this;\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 _triggerError: function (options) {\n var dialog = this._initErrorDialog();\n extend(options, { dialog: dialog });\n if (this.pageContainer) {\n progress(this.pageContainer, false);\n }\n if (this.trigger(ERROR, options)) {\n return;\n }\n dialog.open().content(options.message);\n },\n _renderPages: function () {\n var that = this, document = that.document, pagesData;\n that.pages = [];\n if (!document || !document.total) {\n that._renderBlankPage();\n return;\n }\n pagesData = document.pages;\n for (var i = 1; i <= document.total; i++) {\n var viewerPage, pageData = {\n processor: that.processor,\n number: i\n };\n if (pagesData && pagesData.length) {\n pageData = extend(pageData, pagesData[i - 1]);\n }\n viewerPage = new Page(pageData, that);\n that.pages.push(viewerPage);\n that.pageContainer.append(viewerPage.element);\n }\n that._attachContainerEvents();\n that._getVisiblePagesCount();\n },\n _renderBlankPage: function () {\n this._blankPage = new Page(this.options.defaultPageSize, this);\n this.pageContainer.append(this._blankPage.element);\n this.trigger(UPDATE, { isBlank: true });\n },\n _resize: function () {\n var that = this, containerWidth, ratio;\n if (!that._allowResize) {\n return;\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 if (that.toolbar) {\n that.toolbar.resize(true);\n }\n if (that._resizeHandler) {\n clearTimeout(that._resizeHandler);\n }\n that._resizeHandler = setTimeout(that._resizePages.bind(that), 100);\n },\n _resizePages: function () {\n var that = this, containerWidth = that.pageContainer[0].clientWidth, ratio = 0;\n that.pages.forEach(function (page) {\n var currentRatio = containerWidth / page.element.width();\n if (currentRatio > ratio) {\n ratio = currentRatio;\n }\n });\n if (that._autoFit) {\n that.zoom(that._autoFit, true);\n return;\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 _attachContainerEvents: function () {\n var that = this;\n that._wheel = kendo.throttle(that._wheel.bind(that), 300);\n if (that.processingLib !== PROCESSORS.dpl) {\n that.pageContainer.on(MOUSEWHEEL, function (e) {\n if (!e.ctrlKey) {\n return;\n }\n if (document.activeElement !== that.pageContainer[0]) {\n that.pageContainer.focus();\n }\n that._wheel(e);\n e.preventDefault();\n });\n }\n that._scroller = new kendo.mobile.ui.Scroller(that.pageContainer, {\n zoom: false,\n elastic: true\n });\n that._scroller.scrollElement.addClass(styles.enablePanning);\n that._scroller.bind(SCROLL, proxy(that._scroll, this));\n },\n _scroll: function (e) {\n var that = this, containerScrollHeight = that.pageContainer[0].scrollHeight, containerHeight = that.pageContainer.height(), containerScrollTop = e.scrollTop, containerOffsetTop = that.pageContainer.offset().top, total = that.pages.length, pageNum = that._pageNum, pageIndex = pageNum - 1, pageToLoadNum = pageNum, pageToLoad, currentPage, currentPageTop, currentPageHeight, previousPage, prevPageTop, prevPageHeight, scrollDirection = containerScrollTop - that._prevScrollTop > 0 ? 1 : -1;\n if (that._preventScroll || !total) {\n that._preventScroll = false;\n return;\n }\n that._scrollingStarted = true;\n currentPage = that.pages[pageIndex];\n currentPageTop = currentPage.element.offset().top - containerOffsetTop;\n currentPageHeight = currentPage.element.height();\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 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 if (pageNum !== pageToLoadNum && pageToLoadNum >= 1 && pageToLoadNum <= total) {\n pageToLoad = that.pages[pageToLoadNum - 1].element;\n if (pageToLoad.offset().top > containerHeight) {\n return;\n }\n that._pageNum = pageToLoadNum;\n that._loadVisiblePages();\n that.trigger(UPDATE, {\n action: PAGE_CHANGE,\n page: pageToLoadNum,\n total: total\n });\n }\n that._prevScrollTop = containerScrollTop;\n },\n _wheel: function (e) {\n var originalEvent = e.originalEvent, delta = originalEvent.wheelDelta ? -originalEvent.wheelDelta : originalEvent.detail, zoomIn = delta < 0;\n this.execute({\n command: ZOOMCOMMAND,\n options: {\n zoomIn: zoomIn,\n zoomOut: !zoomIn,\n updateComboBox: true\n }\n });\n e.preventDefault();\n },\n zoom: function (scale, preventComboBoxChange) {\n var that = this;\n if (!scale) {\n return that.zoomScale;\n }\n return that.execute({\n command: ZOOMCOMMAND,\n options: {\n scale: scale,\n updateComboBox: !preventComboBoxChange\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 _loadDocument: function () {\n var that = this;\n var page = that.options.page;\n progress(that.pageContainer, true);\n that.processor.fetchDocument().done(function (document) {\n that._clearPages();\n that.document = document;\n that._renderPages();\n that.resize(true);\n if (document) {\n page = page >= 1 && page <= document.total ? page : 1;\n that.activatePage(page);\n }\n progress(that.pageContainer, false);\n });\n },\n loadPage: function (number) {\n var page = this.pages && this.pages[number - 1];\n if (page) {\n return page.load(this.zoomScale);\n }\n },\n activatePage: function (number) {\n var page = this.pages && this.pages[number - 1], scroller = this._scroller, scrollerTopPosition, scrollerTopOffset, pageTopOffset, pageMargin;\n if (!page) {\n return;\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 this._pageNum = number;\n this._loadVisiblePages();\n this._preventScroll = true;\n this._scroller.scrollTo(0, -scrollerTopPosition - pageTopOffset + scrollerTopOffset + pageMargin);\n this.trigger(UPDATE, {\n action: PAGE_CHANGE,\n page: number,\n total: this.pages.length\n });\n },\n _getVisiblePagesCount: function () {\n var that = this, loadedPagesHeight = 0, updatedVisiblePagesCount = 0, containerHeight = that.pageContainer[0].clientHeight, index = 0;\n while (loadedPagesHeight <= containerHeight && index < that.pages.length) {\n loadedPagesHeight += that.pages[index].element.height();\n updatedVisiblePagesCount++;\n index++;\n }\n that._visiblePagesCount = updatedVisiblePagesCount;\n },\n _loadVisiblePages: function () {\n var pagesCount = this.pages && this.pages.length, minVisiblePageNum = Math.max(this._pageNum - this._visiblePagesCount, 1), maxVisiblePageNum = Math.min(this._pageNum + this._visiblePagesCount, pagesCount);\n this._visiblePages = this.pages.slice(minVisiblePageNum - 1, maxVisiblePageNum);\n for (var i = minVisiblePageNum; i <= maxVisiblePageNum; i++) {\n this.loadPage(i);\n }\n },\n _loadAllPages: function () {\n var pagesCount = this.pages && this.pages.length;\n var promises = [];\n for (var i = 0; i <= pagesCount; i++) {\n promises.push(this.loadPage(i));\n }\n return promises;\n },\n fromFile: function (file) {\n this.zoomScale = this.options.scale || ZOOM_SCALE;\n this.zoom(this.zoomScale, true);\n this.trigger(UPDATE, {\n action: 'zoom',\n zoom: this.options.scale || 'auto'\n });\n this.processor._updateDocument(file);\n this._loadDocument();\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 page.load();\n var background = kendo.drawing.Path.fromRect(new kendo.geometry.Rect([\n 0,\n 0\n ], [\n page.width,\n page.height\n ]), {\n fill: { color: WHITECOLOR },\n stroke: null\n });\n progress(that.pageContainer, true);\n rootGroup.append(background, page.group);\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 exportSVG: function (options) {\n var that = this;\n var pageNumber = options.page;\n var page = that.pages[pageNumber - 1] || that._blankPage;\n progress(that.pageContainer, true);\n page.load();\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 setOptions: function (options) {\n var that = this;\n if (options.pdfjsProcessing || options.dplProcessing) {\n that._initProcessor(options || {});\n }\n options = $.extend(that.options, options);\n Widget.fn.setOptions.call(that, options);\n if (options.page) {\n that._pageNum = options.page;\n that.activatePage(options.page);\n }\n if (options.width) {\n that.element.width(options.width);\n }\n if (options.height) {\n that.element.height(options.height);\n }\n },\n destroy: function () {\n if (this._resizeHandler) {\n kendo.unbindResize(this._resizeHandler);\n }\n if (this._errorDialog) {\n this._errorDialog.destroy();\n }\n if (this._saveDialog) {\n this._saveDialog.destroy();\n }\n if (this._upload) {\n this._upload.destroy();\n }\n if (this.toolbar) {\n this.toolbar.unbind();\n this.toolbar.destroy();\n this.toolbar = null;\n }\n if (this.pages && this.pages.length) {\n this.pages.forEach(function (page) {\n page.destroy();\n });\n this.pages = [];\n }\n if (this._scroller) {\n this._scroller.unbind();\n this._scroller.destroy();\n }\n this.pageContainer.off(NS);\n Widget.fn.destroy.call(this);\n },\n _clearPages: function () {\n this.pages = [];\n this.document = null;\n this._pageNum = 1;\n this.pageContainer.off(NS);\n this.pageContainer.empty();\n if (this._scroller) {\n this._scroller.reset();\n this._scroller.unbind();\n this._scroller.destroy();\n }\n },\n _toggleSelection: function (enable) {\n var that = this;\n if (enable === undefined) {\n enable = true;\n }\n that._scroller.userEvents._shouldNotMove = enable;\n that._scroller.scrollElement.toggleClass(styles.enableTextSelection, enable);\n that._scroller.scrollElement.toggleClass(styles.enablePanning, !enable);\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 resolve();\n });\n });\n return promise;\n },\n _getTextLayers: function () {\n return this.pages.map(function (page) {\n return page.textLayer;\n });\n }\n });\n ui.plugin(PDFViewer);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));"]}