{"version":3,"file":"kendo.pdfviewer.min.js","names":["global","factory","exports","module","require","define","amd","globalThis","self","kendopdfviewer","js","this","proxy","a","b","e","bind","el","event","callback","addEventListener","unbind","removeEventListener","noop","preventDefault","touchRegExp","normalizeEvent","type","match","pageX","changedTouches","pageY","clientX","clientY","originalEvent","isTouch","offsetX","offsetY","ctrlKey","shiftKey","altKey","Draggable","ref","this$1$1","press","drag","release","mouseOnly","_pressHandler","_dragHandler","_releaseHandler","_ignoreMouse","_mouseOnly","_touchstart","touches","length","_touchmove","_touchend","setTimeout","_restoreMouse","_mousedown","which","document","_mousemove","_mouseup","_pointerdown","isPrimary","button","_pointermove","_pointerup","prototypeAccessors","configurable","supportPointerEvent","window","PointerEvent","get","_element","ownerDocument","prototype","bindTo","element","_unbindFromCurrent","_bindToCurrent","_usePointers","update","destroy","Object","defineProperties","default","$","undefined$1","throttle","func","wait","options","timeout","context","args","result","previous","later","leading","Date","getTime","apply","now","remaining","arguments","clearTimeout","trailing","FRAMES_PER_SECOND","SCROLL","kendo","ui","PdfViewerCommon","Scroller","constructor","events","filter","panScrollThrottleDelay","scrollDirectionModifier","scrollThrottleDelay","onElementScroll","state","trackNextElementScroll","scrollTo","scrollLeft","scrollTop","onDragStart","dragStarted","shouldTrackPanEvents","target","selector","closest","matchesElementSelector","setState","location","locationDelta","x","y","onDrag","calculateEventLocationDelta","directionModifier","onDragEnd","assign","resetState","bindEvents","unbindEvents","initDraggable","destroyDraggable","throttledOnDrag","draggable","cancel","bindDraggableEvents","bindElementScroll","throttledOnElementScroll","unbindElementScroll","unbindDraggableEvents","newState","trackPanEvents","enablePanEventsTracking","disablePanEventsTracking","trackScrollEvent","currentPage","rootElement","scrollElement","querySelector","page","Math","floor","round","offsetHeight","offsetTop","scrollToPage","pageNumber","pages","querySelectorAll","HTMLDivElement","top","max","min","behavior","scrollToSearchMatch","matchElement","scroller","closestCharElement","closestTextElement","closestPageElement","offsetLeft","jQuery","extend","pdfviewer","pdfjs","lib","pdfjsLib","isLoaded","console","error","PDFJS","Class","atob","PDFJSProcessor","init","viewer","file","fetchDocument","that","deferred","Deferred","messages","errorMessages","_isBase64Data","data","getDocument","promise","then","pdf","pageSizes","pagePromises","_downloadData","getData","blob","Blob","resolve","i","numPages","push","getPage","Promise","all","map","pagePromise","viewport","getViewport","scale","width","height","total","catch","_triggerError","message","parseError","notFoundError","name","includes","alertMessage","notFound","_renderBlankPage","fetchPageData","number","downloadFile","fileName","progress","pageContainer","done","reader","FileReader","readAsDataURL","onload","saveAs","dataURI","proxyURL","navigateToDestination","dest","split","JSON","parse","decodeURI","isString","getDestination","explicitDest","_navigateToDest","zoom","getPageIndex","pageIndex","activatePage","_updateDocument","loadingTask","equalSign","test","indexOf","renderTextLayer","params","processor","parseJSON","UploadHelper","DPLProcessor","read","upload","download","ajax","url","dataType","success","stringify","xhr","responseText","pageField","geometries","fromJSON","json","_clearPages","_renderPages","resize","dpl","_initUpload","uploadElement","extendUploadOptions","uploadOptions","select","_onSelect","_onSuccess","_onError","complete","_onComplete","showFileList","multiple","validation","allowedExtensions","async","saveUrl","autoUpload","saveField","kendoUpload","getKendoUpload","response","isPlainObject","XMLHttpRequest","notSupported","fileToUpload","files","trigger","extension","toLowerCase","fromFile","onerror","readAsArrayBuffer","rawFile","drawing","Group","Surface","RENDER","geometryTypes","Path","MultiPath","Rect","Image","Text","Page","attr","_updatePageSize","ratio","pageElement","size","render","BlankPage","_externalDropZoneId","_uploadHelper","_upload","find","dropZone","DPLPage","draw","group","surface","_drawGeometries","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","j","segment","points","lineTo","curveTo","closed","close","matrix","create","Matrix","PDFJSPage","canvas","css","fn","call","defaultScale","force","_scale","_page","_renderPromise","dpr","devicePixelRatio","getContext","_dpr","_renderTask","canvasContext","_renderTextLayer","textLayer","remove","getTextContent","normalizeWhitespace","textContent","html","container","textDivs","enhanceTextSelection","_renderAnnotationLayer","annotationLayer","position","left","overflow","pointerEvents","getAnnotations","intent","annotations","annotation","subtype","rect","boundingRect","convertToViewportPoint","encodeURI","forEach","link","span","display","SEARCH_HIGHLIGHT_MARK_CLASS","isArray","Array","SearchDOM","processDom","highlightClass","charClass","targets","textNodes","charIndex","text","traverseToTextNode","processTextNode","node","nodeType","childNodes","wrap","parent","empty","splitChars","children","unwrap","newHtml","innerHTML","search","value","matchCase","expression","RegExp","matches","resetMark","resetHighlight","resetMatchIndex","exec","startOffset","index","endOffset","highlightAll","mark","start","end","highlight","matchIndex","addClass","removeClass","removeAttr","currentIndex","wrapInner","contents","nextMatch","previousMatch","getMarkedIndex","getFirstMarked","eq","each","item","encode","htmlEncode","outerWidth","_outerWidth","EXTENSIONS","keys","ErrorDialog","actions","dialogs","okText","_dialog","kendoDialog","getKendoDialog","open","center","ExportAsDialog","fileFormats","description","exportAsDialog","png","svg","title","_initializeDialog","autoFocus","resizable","modal","preventScroll","maxWidth","template","labels","saveAsType","save","_updateModel","pagesCount","viewModel","set","dialogMessages","dialog","kendoWindow","getKendoWindow","observable","defaultFileName","SearchDialog","dragHandle","icon","iconClass","inputLabel","of","next","_showSearchDialog","_hideSearchDialog","innerWidth","kendoStop","kendoAnimate","effects","direction","fade","duration","ev","properties","hide","dialogElm","prepend","_draggable","axis","dragstart","wnd","containment","startPosition","client","getOffset","_innerWidth","parseInt","clientWidth","support","scrollbar","maxLeft","isNaN","toString","userEvents","stopPropagation","searchModel","boundValue","searchText","matchCaseClick","prev","onKeyup","key","keyCode","navigationFn","ENTER","ESC","onInput","Command","OpenCommand","click","PageChangeCommand","current","targetPage","_pageNum","Number","DownloadCommand","info","ExportCommand","_saveDialog","_initDialog","exportImage","exportSVG","EnableSelectionCommand","_toggleSelection","EnablePanCommand","OpenSearchCommand","searchDialog","pageContainerWrapper","offset","_open","_next","_prev","_close","changeHandler","_change","zoomStartHandler","_closeDialog","openFileHandler","_searchDOM","_initSearchDOM","searchEngine","_updateSearchModel","toolbar","field","model","_scrollToMark","marked","pdfScroller","ZoomCommand","loadedPagesHeight","containerHeight","clientHeight","updatedVisiblePagesCount","renderTasks","processingLib","_calculateZoom","updateViewer","_scrollingStarted","zoomScale","_setPageContainerScaleFactor","pageHeight","_visiblePages","_visiblePagesCount","_loadVisiblePages","_triggerZoomEnd","preventZoom","viewerOptions","visibleCanvas","calculatedDpr","scaleValue","_allowResize","_autoFit","zoomIn","zoomRate","zoomOut","_autoZoomScale","replace","zoomMin","zoomMax","updateComboBox","_updateZoomComboBox","PrintCommand","_renderPrintContainer","_loadAllPages","processAfterRender","printContainer","loadPromises","renderPromises","getRenderPromise","_originalScale","_renderPrintPages","_printDocument","_renderPrintImage","div","img","toDataURL","myWindow","browser","write","focus","print","chrome","chromiumEdge","on","popupBlocked","NS","getCurrentPage","PLUS","MINUS","ZERO","NUMPAD_ZERO","Widget","ERROR","KEYDOWN","MOUSEWHEEL","UPDATE","ZOOM_SCALE","PAGE_CHANGE","ZOOMCOMMAND","CLICK","PROCESSORS","styles","PREDEFINED_ZOOM_VALUES","PDFViewer","deepExtend","_processMessages","_wrapper","_renderToolbar","_initProcessor","_renderPageContainer","_loadDocument","notify","_showWatermarkOverlay","wrapper","pdfjsProcessing","dplProcessing","loadOnDemand","items","defaultPageSize","zoomLevel","actualWidth","autoWidth","fitToWidth","fitToPage","exportAs","pager","first","last","toggleSelection","togglePan","defaultTools","command","spacer","zoomInOut","fillMode","attributes","class","buttons","showText","component","componentOptions","enable","dataTextField","dataValueField","valuePrimitive","clearOnEscape","commandOn","togglable","selected","spacer2","exportAsTool","pagerTools","rounded","_keydown","_resizeHandler","onResize","plusShortcuts","NUMPAD_PLUS","minusShortcuts","NUMPAD_MINUS","zeroShortcuts","shouldExecute","_blankPage","execute","processingOptions","toolbarOptions","tools","_processTools","parentMessages","toolbarElement","appendTo","ToolBar","_toolbarClick","_updateToolbar","flatMap","t","zoomLevels","percent","comboOptions","concat","dataSource","p","isRtl","rtlDirection","pageOptions","toolbarEl","zoomCombo","toFocus","_getAllItems","isBlank","action","_updatePager","_updateOnBlank","_resetTabIndex","textBox","totalPagesSpan","_togglePagerDisabledClass","prevFirst","nextLast","isPredefined","val","_initErrorDialog","_errorDialog","dialogInstance","style","setProperty","pagesData","viewerPage","pageData","_attachContainerEvents","_getVisiblePagesCount","_resize","_resizePages","containerWidth","currentRatio","_wheel","activeElement","_scroll","_linkHandler","pageToLoadNum","pageNum","_preventScroll","nextPageIndex","wheelDelta","detail","preventComboBoxChange","commandOptions","parentNode","loadPage","minVisiblePageNum","maxVisiblePageNum","slice","promises","rootGroup","background","fromRect","color","forceProxy","proxyTarget","setOptions","unbindResize","off","toggleClass","_getTextLayers","plugin"],"sources":["kendo.pdfviewer.js"],"mappings":"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","sourcesContent":["(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('kendo.mobile.scroller.js'), require('kendo.toolbar.js'), require('kendo.combobox.js'), require('kendo.textbox.js'), require('kendo.core.js'), require('kendo.drawing.js'), require('kendo.upload.js'), require('kendo.dialog.js'), require('kendo.window.js'), require('kendo.binder.js'), require('kendo.numerictextbox.js'), require('kendo.dropdownlist.js'), require('kendo.icons.js'), require('kendo.draganddrop.js')) :\n typeof define === 'function' && define.amd ? define(['kendo.mobile.scroller', 'kendo.toolbar', 'kendo.combobox', 'kendo.textbox', 'kendo.core', 'kendo.drawing', 'kendo.upload', 'kendo.dialog', 'kendo.window', 'kendo.binder', 'kendo.numerictextbox', 'kendo.dropdownlist', 'kendo.icons', 'kendo.draganddrop'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, (global.kendopdfviewer = global.kendopdfviewer || {}, global.kendopdfviewer.js = factory()));\n})(this, (function () {\n var proxy = function (a, b) { return function (e) { return b(a(e)); }; };\n\n var bind = function (el, event, callback) { return el.addEventListener && el.addEventListener(event, callback); };\n\n var unbind = function (el, event, callback) { return el && el.removeEventListener && el.removeEventListener(event, callback); };\n\n var noop = function () { /* empty */ };\n\n var preventDefault = function (e) { return e.preventDefault(); };\n\n var touchRegExp = /touch/;\n\n // 300ms is the usual mouse interval;\n // // However, an underpowered mobile device under a heavy load may queue mouse events for a longer period.\n var IGNORE_MOUSE_TIMEOUT = 2000;\n\n function normalizeEvent(e) {\n if (e.type.match(touchRegExp)) {\n return {\n pageX: e.changedTouches[0].pageX,\n pageY: e.changedTouches[0].pageY,\n clientX: e.changedTouches[0].clientX,\n clientY: e.changedTouches[0].clientY,\n type: e.type,\n originalEvent: e,\n isTouch: true\n };\n }\n\n return {\n pageX: e.pageX,\n pageY: e.pageY,\n clientX: e.clientX,\n clientY: e.clientY,\n offsetX: e.offsetX,\n offsetY: e.offsetY,\n type: e.type,\n ctrlKey: e.ctrlKey,\n shiftKey: e.shiftKey,\n altKey: e.altKey,\n originalEvent: e\n };\n }\n\n var Draggable = function Draggable(ref) {\n var this$1$1 = this;\n var press = ref.press; if ( press === void 0 ) press = noop;\n var drag = ref.drag; if ( drag === void 0 ) drag = noop;\n var release = ref.release; if ( release === void 0 ) release = noop;\n var mouseOnly = ref.mouseOnly; if ( mouseOnly === void 0 ) mouseOnly = false;\n\n this._pressHandler = proxy(normalizeEvent, press);\n this._dragHandler = proxy(normalizeEvent, drag);\n this._releaseHandler = proxy(normalizeEvent, release);\n this._ignoreMouse = false;\n this._mouseOnly = mouseOnly;\n\n this._touchstart = function (e) {\n if (e.touches.length === 1) {\n this$1$1._pressHandler(e);\n }\n };\n\n this._touchmove = function (e) {\n if (e.touches.length === 1) {\n this$1$1._dragHandler(e);\n }\n };\n\n this._touchend = function (e) {\n // the last finger has been lifted, and the user is not doing gesture.\n // there might be a better way to handle this.\n if (e.touches.length === 0 && e.changedTouches.length === 1) {\n this$1$1._releaseHandler(e);\n this$1$1._ignoreMouse = true;\n setTimeout(this$1$1._restoreMouse, IGNORE_MOUSE_TIMEOUT);\n }\n };\n\n this._restoreMouse = function () {\n this$1$1._ignoreMouse = false;\n };\n\n this._mousedown = function (e) {\n var which = e.which;\n\n if ((which && which > 1) || this$1$1._ignoreMouse) {\n return;\n }\n\n bind(this$1$1.document, \"mousemove\", this$1$1._mousemove);\n bind(this$1$1.document, \"mouseup\", this$1$1._mouseup);\n this$1$1._pressHandler(e);\n };\n\n this._mousemove = function (e) {\n this$1$1._dragHandler(e);\n };\n\n this._mouseup = function (e) {\n unbind(this$1$1.document, \"mousemove\", this$1$1._mousemove);\n unbind(this$1$1.document, \"mouseup\", this$1$1._mouseup);\n this$1$1._releaseHandler(e);\n };\n\n this._pointerdown = function (e) {\n if (e.isPrimary && e.button === 0) {\n bind(this$1$1.document, \"pointermove\", this$1$1._pointermove);\n bind(this$1$1.document, \"pointerup\", this$1$1._pointerup);\n bind(this$1$1.document, \"pointercancel\", this$1$1._pointerup);\n bind(this$1$1.document, \"contextmenu\", preventDefault);\n\n this$1$1._pressHandler(e);\n }\n };\n\n this._pointermove = function (e) {\n if (e.isPrimary) {\n this$1$1._dragHandler(e);\n }\n };\n\n this._pointerup = function (e) {\n if (e.isPrimary) {\n unbind(this$1$1.document, \"pointermove\", this$1$1._pointermove);\n unbind(this$1$1.document, \"pointerup\", this$1$1._pointerup);\n unbind(this$1$1.document, \"pointercancel\", this$1$1._pointerup);\n unbind(this$1$1.document, \"contextmenu\", preventDefault);\n\n this$1$1._releaseHandler(e);\n }\n };\n };\n\n var prototypeAccessors = { document: { configurable: true } };\n\n Draggable.supportPointerEvent = function supportPointerEvent () {\n return (typeof window !== 'undefined') && window.PointerEvent;\n };\n\n prototypeAccessors.document.get = function () {\n return this._element\n ? this._element.ownerDocument\n : document;\n };\n\n Draggable.prototype.bindTo = function bindTo (element) {\n if (element === this._element) {\n return;\n }\n\n if (this._element) {\n this._unbindFromCurrent();\n }\n\n this._element = element;\n this._bindToCurrent();\n };\n\n Draggable.prototype._bindToCurrent = function _bindToCurrent () {\n var element = this._element;\n\n if (this._usePointers()) {\n bind(element, \"pointerdown\", this._pointerdown);\n return;\n }\n\n bind(element, \"mousedown\", this._mousedown);\n\n if (!this._mouseOnly) {\n bind(element, \"touchstart\", this._touchstart);\n bind(element, \"touchmove\", this._touchmove);\n bind(element, \"touchend\", this._touchend);\n }\n };\n\n Draggable.prototype._unbindFromCurrent = function _unbindFromCurrent () {\n var element = this._element;\n\n if (this._usePointers()) {\n unbind(element, \"pointerdown\", this._pointerdown);\n unbind(this.document, \"pointermove\", this._pointermove);\n unbind(this.document, \"pointerup\", this._pointerup);\n unbind(this.document, \"contextmenu\", preventDefault);\n unbind(this.document, \"pointercancel\", this._pointerup);\n return;\n }\n\n unbind(element, \"mousedown\", this._mousedown);\n\n if (!this._mouseOnly) {\n unbind(element, \"touchstart\", this._touchstart);\n unbind(element, \"touchmove\", this._touchmove);\n unbind(element, \"touchend\", this._touchend);\n }\n };\n\n Draggable.prototype._usePointers = function _usePointers () {\n return !this._mouseOnly && Draggable.supportPointerEvent();\n };\n\n Draggable.prototype.update = function update (ref) {\n var press = ref.press; if ( press === void 0 ) press = noop;\n var drag = ref.drag; if ( drag === void 0 ) drag = noop;\n var release = ref.release; if ( release === void 0 ) release = noop;\n var mouseOnly = ref.mouseOnly; if ( mouseOnly === void 0 ) mouseOnly = false;\n\n this._pressHandler = proxy(normalizeEvent, press);\n this._dragHandler = proxy(normalizeEvent, drag);\n this._releaseHandler = proxy(normalizeEvent, release);\n this._mouseOnly = mouseOnly;\n };\n\n Draggable.prototype.destroy = function destroy () {\n this._unbindFromCurrent();\n this._element = null;\n };\n\n Object.defineProperties( Draggable.prototype, prototypeAccessors );\n\n // Re-export as \"default\" field to address a bug\n // where the ES Module is imported by CommonJS code.\n //\n // See https://github.com/telerik/kendo-angular/issues/1314\n Draggable.default = Draggable;\n\n var __meta__$3 = {\n id: \"pdfviewercommon\",\n name: \"PdfViewerCommon\",\n category: \"web\",\n description: \"This is the common package for PdfViewer across all kendo flavours\",\n depends: [\"core\"]\n };\n\n (function($, undefined$1) {\n const throttle = function(func, wait, options = {}) {\n let timeout, context, args, result;\n let previous = 0;\n const later = function() {\n previous = options.leading === false ? 0 : new Date().getTime();\n timeout = undefined$1;\n result = func.apply(context, args);\n if (!timeout) {\n context = args = null;\n }\n };\n const throttled = function() {\n const now = new Date().getTime();\n if (!previous && options.leading === false) {\n previous = now;\n }\n const remaining = wait - (now - previous);\n context = undefined$1; // this\n args = arguments;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = undefined$1;\n }\n previous = now;\n result = func.apply(context, args);\n if (!timeout) {\n context = args = null;\n }\n }\n else if (!timeout && options.trailing !== false) {\n timeout = window.setTimeout(later, remaining);\n }\n return result;\n };\n return throttled;\n };\n const preventDefault = (e) => {\n if (e.preventDefault) {\n e.preventDefault();\n }\n if (e.originalEvent) {\n e.originalEvent.preventDefault();\n }\n };\n const matchesElementSelector = (element, selector) => {\n if (!element || !selector) {\n return false;\n }\n return element.closest(selector);\n };\n const FRAMES_PER_SECOND = 1000 / 60;\n const SCROLL = 'scroll';\n /**\n * @hidden\n */\n class Scroller {\n constructor(element, options) {\n this.options = {\n events: {\n [SCROLL]: () => undefined$1\n },\n filter: '',\n // throttle the scroll events to get a more similar experience\n // to the scrolling behavior in Adobe Acrobat Reader\n // as well as allow a way to improve the scrolling performance for large files\n panScrollThrottleDelay: FRAMES_PER_SECOND,\n // the drag directions are actually reversed, e.g.\n // dragging to the right actually moves the document to the left\n scrollDirectionModifier: -1,\n scrollThrottleDelay: FRAMES_PER_SECOND\n };\n this.onElementScroll = () => {\n const element = this.element;\n if (this.state.trackNextElementScroll) {\n this.scrollTo(element.scrollLeft, element.scrollTop);\n }\n else {\n // reset the state, so that consecutive scroll events can be handled\n this.state.trackNextElementScroll = true;\n }\n };\n this.onDragStart = (e) => {\n this.state.dragStarted = false;\n if (!this.shouldTrackPanEvents()) {\n return;\n }\n const target = e.target || (e.originalEvent || {}).target;\n if (this.options.filter &&\n !matchesElementSelector(target, this.options.filter)) {\n return;\n }\n preventDefault(e);\n this.setState({\n dragStarted: true,\n location: {\n pageX: e.pageX,\n pageY: e.pageY\n },\n locationDelta: {\n x: 0,\n y: 0\n }\n });\n };\n this.onDrag = (e) => {\n if (!this.shouldTrackPanEvents() || !this.state.dragStarted) {\n return;\n }\n this.calculateEventLocationDelta(e);\n this.setState({\n location: {\n pageX: e.pageX,\n pageY: e.pageY\n }\n });\n const directionModifier = this.options.scrollDirectionModifier;\n const scrollLeft = this.element.scrollLeft +\n directionModifier * this.state.locationDelta.x;\n const scrollTop = this.element.scrollTop +\n directionModifier * this.state.locationDelta.y;\n this.scrollTo(scrollLeft, scrollTop);\n };\n this.onDragEnd = () => {\n if (!this.shouldTrackPanEvents()) {\n return;\n }\n };\n this.element = element;\n this.options = Object.assign({}, this.options, options);\n this.resetState();\n this.bindEvents();\n }\n destroy() {\n this.unbindEvents();\n }\n initDraggable() {\n this.destroyDraggable();\n if (this.options.panScrollThrottleDelay > 0) {\n this.throttledOnDrag = throttle(this.onDrag, this.options.panScrollThrottleDelay);\n }\n else {\n this.throttledOnDrag = this.onDrag;\n }\n this.draggable = new Draggable({\n mouseOnly: false,\n press: this.onDragStart,\n drag: this.throttledOnDrag,\n release: this.onDragEnd\n });\n this.draggable.bindTo(this.element);\n }\n destroyDraggable() {\n if (this.draggable && this.draggable.destroy) {\n this.draggable.destroy();\n if (this.throttledOnDrag && this.throttledOnDrag.cancel) {\n this.throttledOnDrag.cancel();\n this.throttledOnDrag = null;\n }\n }\n }\n bindEvents() {\n this.bindDraggableEvents();\n this.bindElementScroll();\n }\n bindDraggableEvents() {\n this.initDraggable();\n }\n bindElementScroll() {\n if (this.options.scrollThrottleDelay > 0) {\n this.throttledOnElementScroll = throttle(this.onElementScroll, this.options.scrollThrottleDelay);\n }\n else {\n this.throttledOnElementScroll = this.onElementScroll;\n }\n this.element.addEventListener(SCROLL, this.throttledOnElementScroll);\n }\n unbindEvents() {\n this.unbindElementScroll();\n this.unbindDraggableEvents();\n }\n unbindDraggableEvents() {\n this.destroyDraggable();\n }\n unbindElementScroll() {\n if (this.throttledOnElementScroll &&\n this.throttledOnElementScroll.cancel) {\n this.throttledOnElementScroll.cancel();\n this.throttledOnElementScroll = null;\n }\n this.element.removeEventListener(SCROLL, this.throttledOnElementScroll);\n }\n setState(newState) {\n this.state = Object.assign({}, this.state || {}, newState);\n }\n resetState() {\n this.setState({\n trackPanEvents: false,\n trackNextElementScroll: false,\n location: { pageX: 0, pageY: 0 },\n locationDelta: { x: 0, y: 0 }\n });\n }\n enablePanEventsTracking() {\n this.state.trackPanEvents = true;\n this.bindDraggableEvents();\n }\n disablePanEventsTracking() {\n this.unbindDraggableEvents();\n this.state.trackPanEvents = false;\n }\n shouldTrackPanEvents() {\n return this.state.trackPanEvents;\n }\n calculateEventLocationDelta(e) {\n this.state.locationDelta = {\n x: e.pageX - this.state.location.pageX,\n y: e.pageY - this.state.location.pageY\n };\n }\n scrollTo(x, y, options = { trackScrollEvent: true }) {\n if (!options.trackScrollEvent) {\n this.state.trackNextElementScroll = false;\n }\n this.element.scrollLeft = x;\n this.element.scrollTop = y;\n }\n }\n\n /**\n * A function which gives you the page number of the document according to the scroll position.\n *\n * @param rootElement The root HTML element of the PDFViewer component.\n * @returns The page number.\n */\n const currentPage = (rootElement) => {\n const scrollElement = rootElement.querySelector(\n '.k-pdf-viewer-canvas'\n );\n const page = rootElement.querySelector('.k-page');\n\n return scrollElement && page\n ? Math.floor(\n Math.round(scrollElement.scrollTop) /\n (page.offsetHeight + page.offsetTop) +\n 0.01\n )\n : 0;\n };\n\n const scrollToPage = (\n rootElement,\n pageNumber\n ) => {\n const pages = rootElement.querySelectorAll('.k-page');\n const page = pages[0];\n if (page instanceof HTMLDivElement) {\n const top =\n (page.offsetHeight + page.offsetTop) *\n Math.max(0, Math.min(pageNumber, pages.length - 1));\n const scrollElement = page.closest('.k-pdf-viewer-canvas');\n if (scrollElement) {\n scrollElement.scrollTo({ top, behavior: 'auto' });\n }\n }\n };\n\n const searchMatchScrollLeftOffset = 0;\n const searchMatchScrollTopOffset = -64;\n\n const scrollToSearchMatch = (matchElement, scroller) => {\n if (!matchElement) {\n return;\n }\n\n const closestCharElement = matchElement.closest('.k-text-char');\n const closestTextElement = closestCharElement\n ? closestCharElement.closest('span[role=\"presentation\"]')\n : null;\n\n if (!closestTextElement) {\n return;\n }\n\n const closestPageElement =\n closestTextElement.closest('.k-page');\n\n if (!closestPageElement) {\n return;\n }\n\n const scrollLeft =\n closestPageElement.offsetLeft +\n -1 * scroller.element.offsetLeft +\n closestTextElement.offsetLeft +\n searchMatchScrollLeftOffset;\n\n const scrollTop =\n closestPageElement.offsetTop +\n -1 * scroller.element.offsetTop +\n closestTextElement.offsetTop +\n searchMatchScrollTopOffset;\n\n scroller.scrollTo(scrollLeft, scrollTop, { trackScrollEvent: false });\n };\n\n kendo.ui.PdfViewerCommon = { Scroller, currentPage, scrollToPage, scrollToSearchMatch };\n })(window.kendo.jQuery);\n\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 navigateToDestination: function(dest) {\n var that = this;\n var dest = dest.split(\"#\")[1];\n\n try {\n dest = JSON.parse(decodeURI(dest));\n } catch (error) {\n dest = decodeURI(dest);\n }\n\n if (kendo.isString(dest)) {\n that.pdf.getDestination(dest).then(function(explicitDest) {\n that._navigateToDest(explicitDest);\n });\n } else if (dest) {\n that._navigateToDest(dest);\n }\n },\n _navigateToDest: function(explicitDest) {\n var that = this,\n pageNumber = explicitDest[0],\n zoom = explicitDest[4] || that.viewer.options.zoom;\n\n that.pdf.getPageIndex(pageNumber)\n .then(pageIndex => {\n that.viewer.activatePage(pageIndex + 1);\n that.viewer.zoom(`${zoom * 100}%`);\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 Class = kendo.Class,\n extend = $.extend,\n parseJSON = JSON.parse,\n progress = kendo.ui.progress,\n Class = kendo.Class,\n OPEN = \"open\";\n\n var UploadHelper = Class.extend({\n init: function(viewer) {\n this.viewer = viewer;\n this.errorMessages = this.viewer.options.messages.errorMessages;\n this.upload = this.viewer.processor.upload;\n },\n _initUpload: function(uploadElement, extendUploadOptions) {\n var uploadOptions = extend({\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 }, extendUploadOptions || {});\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 = (uploadElement || $('')).kendoUpload(uploadOptions).getKendoUpload();\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 extend(kendo.pdfviewer, {\n UploadHelper: UploadHelper\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 UploadHelper = kendo.pdfviewer.UploadHelper,\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 BLANK_PAGE_TEMPLATE = (dropzoneId) => `
\n
\n
\n \n \n \n \n \n Drag and drop files here to upload\n
\n
\n \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 BlankPage = Page.extend({\n init: function(options, viewer) {\n this.viewer = viewer;\n this.options = options;\n this._externalDropZoneId = `${viewer.element.attr(\"id\")}-external-dropzone`;\n this.element = $(BLANK_PAGE_TEMPLATE(this._externalDropZoneId));\n this._uploadHelper = new UploadHelper(viewer);\n },\n _initUpload: function() {\n this._upload = this._uploadHelper._initUpload(this.element.find(\"input[ref-pdfviewer-blank-page-upload]\"), {\n dropZone: `#${this._externalDropZoneId}`,\n showFileList: false,\n async: {\n autoUpload: false,\n saveUrl: \"save\"\n }\n });\n },\n resize: noop,\n _updatePageSize: noop,\n destroy: function() {\n if (this._upload) {\n this._upload.destroy();\n }\n\n kendo.destroy(this.element);\n },\n render: noop\n });\n\n var DPLPage = Page.extend({\n draw: function() {\n var that = this,\n geometries = that.options.geometries;\n\n that.group = new Group();\n that.surface.draw(that.group);\n\n that._drawGeometries(geometries);\n\n that.viewer.trigger(RENDER, { page: this });\n kendo.ui.progress(that.element, false);\n },\n load: function() {\n var that = this;\n\n if (that.loaded || !that.processor)\n {\n return;\n }\n\n that.processor.fetchPageData(that.pageNumber).then(function(data) {\n that.options = data;\n that._initSurface();\n that.draw();\n });\n\n that.loaded = true;\n },\n _initSurface: function() {\n var size = {\n width: this.element.width(),\n height: this.element.height()\n };\n var surfaceOptions = extend({ width: this.width, height: this.height }, this.viewer.options.view);\n this.surface = new Surface(this.element, surfaceOptions);\n this._updatePageSize(size);\n },\n _drawGeometries: function(geometries) {\n var that = this,\n kGeometry;\n\n if (!geometries) {\n return;\n }\n\n for (var i = 0; i <= geometries.length; i++) {\n var geometry = geometries[i];\n\n if (!geometry) {\n continue;\n }\n\n switch (geometry.type) {\n case geometryTypes.Path:\n case geometryTypes.MultiPath:\n kGeometry = that._drawPath(geometry);\n break;\n case geometryTypes.Rect:\n kGeometry = that._drawRect(geometry);\n break;\n case geometryTypes.Image:\n kGeometry = that._drawImage(geometry);\n break;\n case geometryTypes.Text:\n kGeometry = that._drawText(geometry);\n break;\n default:\n kGeometry = null;\n break;\n }\n\n if (kGeometry)\n {\n that.group.append(kGeometry);\n }\n }\n },\n _drawRect: function(geometry)\n {\n var rectGeo = new kendo.geometry.Rect(geometry.point, geometry.size);\n\n return new drawing.Rect(rectGeo, {\n transform: this._getMatrix(geometry.transform),\n fill: geometry.fillOptions,\n stroke: geometry.strokeOptions\n });\n },\n\n _drawImage: function(geometry)\n {\n var imageRect = new kendo.geometry.Rect(geometry.point, geometry.size);\n return new drawing.Image(geometry.src, imageRect, {\n transform: this._getMatrix(geometry.transform)\n });\n },\n\n _drawText: function(geometry)\n {\n var options = {\n transform: this._getMatrix(geometry.transform),\n stroke: geometry.strokeOptions,\n fill: geometry.fillOptions,\n font: geometry.font\n };\n return new kendo.drawing.Text(geometry.content, geometry.point, options);\n },\n\n _drawPath: function(geometry)\n {\n var options = {\n transform: this._getMatrix(geometry.transform),\n stroke: geometry.strokeOptions,\n fill: geometry.fillOptions\n };\n var path = new drawing.MultiPath(options);\n\n for (var i = 0; i < geometry.paths.length; i++) {\n var subPath = geometry.paths[i];\n\n if (!subPath.segments)\n {\n return;\n }\n\n path.moveTo.apply(path, subPath.point);\n\n for (var j = 0; j < subPath.segments.length; j++) {\n var segment = subPath.segments[j];\n var drawAction = segment.points.length === 1 ? path.lineTo : path.curveTo;\n drawAction.apply(path, segment.points);\n }\n\n if (subPath.closed) {\n path.close();\n }\n }\n\n return path;\n },\n\n _getMatrix: function(transform) {\n var matrix = Object.create(kendo.geometry.Matrix.prototype);\n kendo.geometry.Matrix.apply(matrix, transform);\n return matrix;\n }\n });\n\n var PDFJSPage = Page.extend({\n init: function(options, viewer) {\n var that = this,\n canvas;\n\n canvas = $(\"\").css({\n width: \"100%\",\n height: \"100%\"\n });\n that.canvas = canvas.get(0);\n\n Page.fn.init.call(that, options, viewer);\n that.canvas.width = that.width;\n that.canvas.height = that.height;\n\n that.element.append(canvas);\n },\n load: function(defaultScale, force) {\n var that = this,\n promise = $.Deferred();\n\n if (that._scale === defaultScale && !force)\n {\n return;\n } else if (that._scale && that._scale !== defaultScale && !force)\n {\n that._scale = defaultScale;\n that.render(defaultScale);\n return promise.resolve(that);\n }\n\n if (that.processor) {\n that.processor.fetchPageData(that.pageNumber).then(function(page) {\n that._page = page;\n that._renderPromise = that.render(defaultScale).then(function() {\n that.viewer.trigger(RENDER, { page: that });\n });\n promise.resolve(that);\n });\n }\n\n that._scale = defaultScale;\n that.loaded = true;\n return promise;\n },\n render: function(scale) {\n var that = this;\n var dpr = window.devicePixelRatio >= DEFAULT_DPR ? window.devicePixelRatio : DEFAULT_DPR;\n var context = this.canvas.getContext('2d'),\n viewport = this._page.getViewport({\n scale: scale\n });\n\n this.canvas.width = viewport.width * dpr;\n this.canvas.height = viewport.height * dpr;\n context.scale(dpr, dpr);\n\n this._scale = scale;\n this._dpr = dpr;\n\n if (this._renderTask)\n {\n this._renderTask.cancel();\n this._renderTask = null;\n }\n\n this._updatePageSize({\n width: viewport.width,\n height: viewport.height\n });\n\n this._renderTask = this._page.render({\n canvasContext: context,\n viewport: viewport\n });\n\n this._renderTextLayer(viewport);\n\n return this._renderTask.promise.then(function() {\n that._renderTask = null;\n }).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\n that.processor.renderTextLayer(params);\n that._renderAnnotationLayer(viewport);\n });\n },\n _renderAnnotationLayer: function(viewport) {\n var that = this,\n page = that._page;\n\n if (that.annotationLayer) {\n that.annotationLayer.remove();\n }\n\n that.annotationLayer = $(\"
\").css({\n position: 'absolute',\n top: 0,\n left: 0,\n overflow: 'hidden',\n height: that.element.height(),\n width: that.element.width(),\n pointerEvents: 'none',\n });\n\n that.element.append(that.annotationLayer);\n\n page.getAnnotations({ intent: \"display\" }).then(function(annotations) {\n var links = annotations.map(function(annotation) {\n if (annotation.subtype === 'Link') {\n var rect = annotation.rect;\n var boundingRect = [\n viewport.convertToViewportPoint(rect[0], rect[1]),\n viewport.convertToViewportPoint(rect[2], rect[3]),\n ];\n\n var left = Math.min(boundingRect[0][0], boundingRect[1][0]);\n var top = Math.min(boundingRect[0][1], boundingRect[1][1]);\n var width = Math.max(boundingRect[0][0], boundingRect[1][0]) - left;\n var height = Math.max(boundingRect[0][1], boundingRect[1][1]) - top;\n\n var url = annotation.url || (annotation.dest && `#${ kendo.isString(annotation.dest) ? encodeURI(annotation.dest) : encodeURI(JSON.stringify(annotation.dest)) }`);\n\n return { url: url, rect: { left, top, width, height } };\n }\n });\n\n links.forEach(function(link) {\n var span = $(\"\").css({\n position: 'absolute',\n left: link.rect.left,\n top: link.rect.top,\n }).append($(``).css({\n width: link.rect.width,\n height: link.rect.height,\n display: 'inline-block',\n pointerEvents: 'auto',\n }));\n\n that.annotationLayer.append(span);\n });\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 extend(kendo.pdfviewer, {\n BlankPage: BlankPage\n });\n })(window.kendo.jQuery);\n\n (function($, undefined$1) {\n var Class = kendo.Class,\n extend = $.extend,\n SEARCH_HIGHLIGHT_MARK_CLASS = \"k-search-highlight-mark\",\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.parent().attr(\"role\", \"presentation\");\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(\".\" + SEARCH_HIGHLIGHT_MARK_CLASS).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(\".\" + SEARCH_HIGHLIGHT_MARK_CLASS).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 Draggable = kendo.ui.Draggable,\n outerWidth = kendo._outerWidth,\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: ({ messages, total }) =>\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: ({ messages }) => '
' +\n `` +\n \"\" +\n `` +\n `` +\n \"\" +\n ` ${encode(messages.of)} ` +\n `` +\n `` +\n `` +\n \"
\"\n },\n open: function() {\n var that = this;\n\n if (!that.dialog) {\n that._initializeDialog();\n }\n\n that.options.open();\n that._showSearchDialog();\n },\n close: function() {\n var that = this;\n that.options.close();\n that._hideSearchDialog();\n },\n _showSearchDialog: function() {\n var that = this;\n\n that.dialog.css(\"left\",`${(that.options.pageContainer.innerWidth() / 2) - (outerWidth(that.dialog, true) / 2)}px`);\n\n that.dialog.kendoStop().kendoAnimate({\n effects: { zoom: { direction: \"in\" }, fade: { direction: \"in\" } },\n duration: 350,\n complete: function(ev) {\n that.dialog.find(\".k-search-dialog-input\").trigger(\"focus\");\n }\n });\n },\n _hideSearchDialog: function() {\n var that = this;\n\n that.dialog.kendoStop().kendoAnimate({\n effects: { zoom: { direction: \"out\", properties: { scale: 0.7 } }, fade: { direction: \"out\" } },\n duration: 350,\n hide: true\n });\n },\n _initializeDialog: function() {\n var that = this;\n var template = kendo.template(that.options.template);\n var dialogElm = $(template({\n messages: that.options.messages\n }));\n\n that.options.pageContainer.prepend(dialogElm);\n that.dialog = dialogElm;\n\n that._draggable = new Draggable(dialogElm, {\n filter: \".k-search-dialog-draghandle\",\n axis: \"x\",\n dragstart: function(e) {\n var wnd = that.dialog;\n var containment = that.options.pageContainer;\n\n wnd.startPosition = {\n left: e.x.client - kendo.getOffset(wnd, \"position\").left,\n };\n\n if (!containment) {\n return null;\n }\n\n containment._innerWidth = containment.innerWidth();\n\n if (parseInt(containment._innerWidth, 10) > containment[0].clientWidth) {\n containment._innerWidth -= kendo.support.scrollbar();\n }\n\n wnd.maxLeft = containment._innerWidth - outerWidth(wnd, true);\n },\n drag: function(e) {\n var wnd = that.dialog;\n var position = {};\n var left;\n\n left = e.x.client - wnd.startPosition.left;\n\n if (left && isNaN(left) && left.toString().indexOf(\"px\") < 0) {\n position.left = left;\n } else {\n position.left = Math.max(\n Math.min(parseInt(left, 10), parseInt(wnd.maxLeft, 10)),\n 0\n );\n }\n\n wnd.css(position);\n },\n });\n\n that._draggable.userEvents.stopPropagation = false;\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.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 } else if (key == keys.ESC) {\n this.close();\n }\n },\n onInput: function(ev) {\n this.set(\"searchText\", ev.target.value);\n }\n });\n\n kendo.bind(dialogElm, 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 scrollToSearchMatch = kendo.ui.PdfViewerCommon.scrollToSearchMatch,\n Class = kendo.Class,\n UploadHelper = kendo.pdfviewer.UploadHelper,\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._uploadHelper = new UploadHelper(this.viewer);\n },\n exec: function() {\n this.viewer._upload = this.viewer._upload || this._uploadHelper._initUpload();\n this.viewer._upload.element.click();\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 pageContainer: that.viewer.pageContainerWrapper,\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\n if (!marked.length) {\n return;\n }\n\n scrollToSearchMatch(marked[0], that.viewer.pdfScroller);\n },\n _closeDialog: function() {\n var that = this;\n that.viewer.searchDialog.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 scrollingStarted = viewer._scrollingStarted;\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 viewer._setPageContainerScaleFactor(scale);\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 var defaultScale = 3;\n\n that._originalScale = that.viewer.zoom();\n that.viewer._setPageContainerScaleFactor(defaultScale);\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(defaultScale, 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\", \"draganddrop\", \"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 Scroller = ui.PdfViewerCommon.Scroller,\n getCurrentPage = ui.PdfViewerCommon.currentPage,\n scrollToPage = ui.PdfViewerCommon.scrollToPage,\n extend = $.extend,\n drawing = kendo.drawing,\n keys = $.extend({ PLUS: 187, MINUS: 189, ZERO: 48, NUMPAD_ZERO: 96 }, kendo.keys),\n Page,\n BlankPage = kendo.pdfviewer.BlankPage,\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-pdf-viewer-canvas k-pos-relative k-overflow-auto\",\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 if (that._showWatermarkOverlay) {\n that._showWatermarkOverlay(that.wrapper[0]);\n }\n },\n\n events: [\n RENDER,\n OPEN,\n ERROR,\n ZOOMSTART,\n ZOOMEND\n ],\n\n options: {\n name: \"PDFViewer\",\n view: {\n type: \"canvas\"\n },\n pdfjsProcessing: {\n file: null\n },\n dplProcessing: {\n read: {\n url: null,\n type: \"GET\",\n dataType: \"json\",\n pageField: \"pageNumber\"\n },\n upload: {\n url: null,\n saveField: \"file\"\n },\n download: {\n url: null\n },\n loadOnDemand: false\n },\n toolbar: {\n items: []\n },\n width: 1000,\n height: 1200,\n page: 1,\n defaultPageSize: {\n width: 794,\n height: 1123\n },\n scale: null,\n zoomMin: 0.5,\n zoomMax: 4,\n zoomRate: 0.25,\n messages: {\n defaultFileName: \"Document\",\n toolbar: {\n zoom: {\n zoomLevel: \"zoom level\",\n zoomOut: \"Zoom Out\",\n zoomIn: \"Zoom In\",\n actualWidth: \"Actual Width\",\n autoWidth: \"Automatic Width\",\n fitToWidth: \"Fit to Width\",\n fitToPage: \"Fit to Page\"\n },\n open: \"Open\",\n exportAs: \"Export\",\n download: \"Download\",\n pager: {\n first: \"Go to the first page\",\n previous: \"Go to the previous page\",\n next: \"Go to the next page\",\n last: \"Go to the last page\",\n of: \"of\",\n page: \"page\",\n pages: \"pages\"\n },\n print: \"Print\",\n toggleSelection: \"Enable Selection\",\n togglePan: \"Enable Panning\",\n search: \"Search\"\n },\n errorMessages: {\n notSupported: \"Only pdf files allowed.\",\n parseError: \"PDF file fails to process.\",\n notFound: \"File is not found.\",\n popupBlocked: \"Popup is blocked.\"\n },\n dialogs: {\n exportAsDialog: {\n title: \"Export...\",\n defaultFileName: \"Document\",\n pdf: \"Portable Document Format (.pdf)\",\n png: \"Portable Network Graphics (.png)\",\n svg: \"Scalable Vector Graphics (.svg)\",\n labels: {\n fileName: \"File name\",\n saveAsType: \"Save as\",\n page: \"Page\"\n }\n },\n okText: \"OK\",\n save: \"Save\",\n cancel: \"Cancel\",\n search: {\n inputLabel: \"Search Text\",\n matchCase: \"Match Case\",\n next: \"Next Match\",\n previous: \"Previous Match\",\n close: \"Close\",\n of: \"of\",\n dragHandle: \"Drag search\"\n }\n }\n }\n },\n\n defaultTools: {\n pager: {\n name: \"pager\",\n command: \"PageChangeCommand\"\n },\n spacer: { type: \"spacer\" },\n zoomInOut: {\n type: \"buttonGroup\",\n fillMode: \"flat\",\n attributes: { \"class\": \"k-zoom-in-out-group\" },\n buttons: [\n { type: \"button\", icon: \"zoom-out\", name: \"zoomOut\", command: \"ZoomCommand\", showText: \"overflow\", options: \"{ \\\"zoomOut\\\": true, \\\"updateComboBox\\\": true }\", fillMode: \"flat\" },\n { type: \"button\", icon: \"zoom-in\", name: \"zoomIn\", command: \"ZoomCommand\", showText: \"overflow\", options: \"{ \\\"zoomIn\\\": true, \\\"updateComboBox\\\": true }\", fillMode: \"flat\" },\n ]\n },\n zoom: {\n type: \"component\",\n name: \"zoom\",\n command: \"ZoomCommand\",\n overflow: \"never\",\n component: \"ComboBox\",\n data: [50, 100, 150, 200, 300, 400],\n componentOptions: {\n enable: false,\n dataTextField: \"text\",\n dataValueField: \"percent\",\n valuePrimitive: true,\n clearOnEscape: false,\n commandOn: \"change\"\n }\n },\n toggleSelection: {\n type: \"buttonGroup\",\n fillMode: \"flat\",\n attributes: { \"class\": \"k-toggle-selection-group\" },\n buttons: [\n {\n togglable: true,\n command: \"EnableSelectionCommand\",\n icon: \"pointer\",\n showText: \"overflow\",\n name: \"toggleSelection\",\n group: \"toggle-pan\",\n fillMode: \"flat\"\n }, {\n togglable: true,\n command: \"EnablePanCommand\",\n icon: \"hand\",\n showText: \"overflow\",\n name: \"togglePan\",\n group: \"toggle-pan\",\n selected: true,\n fillMode: \"flat\"\n }\n ]\n },\n spacer2: { type: \"spacer\" },\n search: {\n type: \"button\",\n command: \"OpenSearchCommand\",\n icon: \"search\",\n name: \"search\",\n showText: \"overflow\",\n enable: false,\n fillMode: \"flat\"\n },\n open: {\n type: \"button\",\n showText: \"overflow\",\n name: \"open\",\n icon: \"folder-open\",\n command: \"OpenCommand\",\n fillMode: \"flat\"\n },\n download: {\n type: \"button\",\n showText: \"overflow\",\n name: \"download\",\n icon: \"download\",\n command: \"DownloadCommand\",\n enable: false,\n fillMode: \"flat\"\n },\n print: {\n type: \"button\",\n showText: \"overflow\",\n name: \"print\",\n icon: \"print\",\n command: \"PrintCommand\",\n enable: false,\n fillMode: \"flat\"\n }\n },\n\n exportAsTool: {\n exportAs: { type: \"button\", showText: \"overflow\", name: \"exportAs\", icon: \"image-export\", command: \"ExportCommand\", fillMode: \"flat\" }\n },\n\n pagerTools: [\n {\n type: \"buttonGroup\",\n fillMode: \"flat\",\n buttons: [\n { type: \"button\", icon: \"caret-alt-to-left\", name: \"first\", showText: \"overflow\", options: \"{ \\\"value\\\": \\\"first\\\" }\", attributes: { class: \"k-first-link\" } },\n { type: \"button\", icon: \"caret-alt-left\", name: \"previous\", showText: \"overflow\", options: \"{ \\\"value\\\": \\\"prev\\\" }\", attributes: { class: \"k-prev-link\" }, rounded: \"none\" },\n ]\n },\n {\n type: \"component\",\n component: \"TextBox\",\n name: \"page\",\n attributes: { class: \"k-viewer-pager-input\" },\n element: \"\",\n overflow: \"never\",\n componentOptions: {\n commandOn: \"change\"\n }\n },\n {\n overflow: \"never\",\n template: function(data) {\n return \"\";\n },\n componentOptions: {\n messages: {\n of: \"of\",\n pages: \"pages\"\n }\n }\n },\n {\n type: \"buttonGroup\",\n fillMode: \"flat\",\n buttons: [\n { type: \"button\", icon: \"caret-alt-right\", name: \"next\", showText: \"overflow\", options: \"{ \\\"value\\\": \\\"next\\\" }\", fillMode: \"flat\", attributes: { class: \"k-next-link\" }, rounded: \"none\" },\n { type: \"button\", icon: \"caret-alt-to-right\", name: \"last\", showText: \"overflow\", options: \"{ \\\"value\\\": \\\"last\\\" }\", fillMode: \"flat\", attributes: { class: \"k-last-link\" } }\n ]\n },\n ],\n\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(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(i => { return { percent: i, text: i + \"%\" } });\n var value = that.options.scale ? that.options.scale * 100 + \"%\" : \"auto\";\n\n zoomLevels = zoomLevels.concat(comboOptions);\n t.componentOptions.dataSource = zoomLevels;\n t.componentOptions.value = value;\n } else if (t.name === \"pager\") {\n t = $.extend({}, that.defaultTools.pager, t);\n\n var pagerTools = that.pagerTools;\n\n that.pager = true;\n\n t = pagerTools.map(p => {\n var compMessages;\n\n if (p.componentOptions && p.componentOptions.messages) {\n compMessages = p.componentOptions.messages;\n Object.keys(messages).forEach(key => {\n p.componentOptions.messages[key] = messages.pager[key];\n });\n }\n\n if (p.buttons) {\n p.buttons = p.buttons.map((b) => {\n if (b.icon && b.icon.indexOf(\"caret-alt\") > -1 && kendo.support.isRtl(that.element)) {\n var direction = b.icon.indexOf(\"left\") > -1 ? \"left\" : \"right\";\n var rtlDirection = b.icon.indexOf(\"left\") > -1 ? \"right\" : \"left\";\n b.icon = b.icon.replace(direction, rtlDirection);\n }\n b.command = t.command;\n return b;\n });\n } else {\n p.command = t.command;\n }\n\n return p;\n });\n }\n\n return t;\n });\n\n return tools;\n },\n\n _updateToolbar: function(e) {\n var pageOptions = {\n page: e.page || 1,\n total: e.total || 1\n },\n toolbar = this.toolbar,\n toolbarEl = toolbar.element,\n zoomCombo = toolbarEl.find(\"[data-command=ZoomCommand][data-role=combobox]\").data(\"kendoComboBox\"),\n toFocus = toolbarEl.find(\".k-focus\");\n\n if (toFocus.length === 0) {\n toFocus = toolbarEl.find(\"[tabindex=0]\").first();\n\n if (toFocus.length === 0) {\n toFocus = toolbar._getAllItems().first();\n }\n }\n\n if (zoomCombo) {\n zoomCombo.enable(!e.isBlank);\n if (e.action === \"zoom\") {\n this._updateZoomComboBox(e.zoom);\n }\n }\n\n if ((e.action === \"pagechange\" || e.isBlank) && this.pager) {\n this._updatePager(pageOptions);\n }\n\n this._updateOnBlank(e.isBlank);\n\n toolbar._resetTabIndex(toFocus);\n },\n\n _updateOnBlank: function(isBlank) {\n var toolbar = this.toolbar,\n toolbarEl = toolbar.element;\n\n toolbar.enable(toolbarEl.find(\".k-toggle-selection-group\"), !isBlank);\n toolbar.enable(toolbarEl.find(\".k-zoom-in-out-group\"), !isBlank);\n\n toolbar.enable(toolbarEl.find(\"[data-command='OpenSearchCommand']\"), !isBlank);\n toolbar.enable(toolbarEl.find(\"[data-command='DownloadCommand']\"), !isBlank);\n toolbar.enable(toolbarEl.find(\"[data-command='PrintCommand']\"), !isBlank);\n },\n\n _updatePager: function(options) {\n var toolbarEl = this.toolbar.element,\n textBox = toolbarEl.find(\"#page-input\").data(\"kendoTextBox\"),\n totalPagesSpan = toolbarEl.find(\"#total-page\");\n\n if (textBox && options.page) {\n textBox.value(options.page);\n }\n\n if (totalPagesSpan.length && options.total) {\n totalPagesSpan.text(options.total);\n }\n\n this._togglePagerDisabledClass(options);\n },\n\n _togglePagerDisabledClass: function(options) {\n var toolbar = this.toolbar,\n toolbarEl = toolbar.element,\n total = !options.total,\n prevFirst = toolbarEl.find(\".k-prev-link\").closest(\".k-button-group\"),\n nextLast = toolbarEl.find(\".k-next-link\").closest(\".k-button-group\"),\n textBox = toolbarEl.find(\"#page-input\").data(\"kendoTextBox\");\n\n if (prevFirst.length) {\n toolbar.enable(prevFirst, total || options.page !== 1);\n }\n if (nextLast.length) {\n toolbar.enable(nextLast, total || options.page !== options.total);\n }\n\n if (textBox) {\n textBox.enable(options.total > 1);\n }\n },\n\n _updateZoomComboBox: function(value) {\n var isPredefined = value === PREDEFINED_ZOOM_VALUES.auto ||\n value === PREDEFINED_ZOOM_VALUES.actual ||\n value === PREDEFINED_ZOOM_VALUES.fitToPage ||\n value === PREDEFINED_ZOOM_VALUES.fitToWidth,\n zoomCombo = this.toolbar.element.find(\"[data-command=ZoomCommand][data-role=combobox]\").data(\"kendoComboBox\");\n\n if (!isPredefined) {\n value = Math.round(value * 100) + '%';\n }\n\n if (zoomCombo) {\n zoomCombo.value(value);\n }\n },\n\n _toolbarClick: function(ev) {\n var command = $(ev.target).data(\"command\"),\n options = $(ev.target).data(\"options\");\n\n options = extend({}, { value: $(ev.target).val() }, options);\n\n if (!command) {\n return;\n }\n\n this.execute({\n command: command,\n options: options\n });\n },\n\n _initErrorDialog: function(options) {\n var that = this;\n\n if (!that._errorDialog) {\n options = extend(options, {\n messages: that.options.messages\n });\n var dialogInstance = new kendo.pdfviewer.dialogs.ErrorDialog(options);\n that._errorDialog = dialogInstance._dialog;\n }\n return that._errorDialog;\n },\n\n _renderPageContainer: function() {\n var that = this;\n\n if (!that.pageContainer) {\n that.pageContainerWrapper = $(\"
\");\n that.pageContainerWrapper.addClass(styles.scroller);\n\n that.pageContainer = $(`
`);\n that.pageContainer.attr(TABINDEX, 0);\n\n that.pageContainerWrapper.append(that.pageContainer);\n that.wrapper.append(that.pageContainerWrapper);\n }\n },\n\n _setPageContainerScaleFactor(scale) {\n var that = this;\n\n if (that.pageContainer) {\n that.pageContainer[0].style.setProperty(\"--scale-factor\", scale);\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 BlankPage(this.options.defaultPageSize, this);\n\n this.pageContainer.append(this._blankPage.element);\n\n this._blankPage._initUpload();\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.pageContainer.addClass(styles.enablePanning);\n that.pageContainerWrapper.bind(SCROLL, that._scroll.bind(that));\n that.pageContainerWrapper.on(CLICK + NS, \".k-annotation-layer a[href]\", that._linkHandler.bind(that));\n },\n\n _linkHandler: function(e) {\n var that = this,\n link = $(e.target).attr(\"href\");\n\n if (link && link.indexOf(\"#\") === 0) {\n that.processor.navigateToDestination && that.processor.navigateToDestination(link);\n e.preventDefault();\n }\n },\n\n _scroll: function(e) {\n var that = this,\n containerHeight = that.pageContainerWrapper.height(),\n total = that.pages.length,\n pageNum = that._pageNum,\n pageIndex = pageNum - 1,\n pageToLoadNum = pageNum,\n pageToLoad,\n currentPage;\n\n if (that._preventScroll || !total) {\n that._preventScroll = false;\n return;\n }\n\n that._scrollingStarted = true;\n const nextPageIndex = getCurrentPage(that.element[0]);\n currentPage = that.pages[pageIndex];\n pageToLoadNum = pageNum + nextPageIndex - pageIndex;\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\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 if (that.pdfScroller) {\n that.pdfScroller.destroy();\n }\n\n that.pdfScroller = new Scroller(that.pageContainer[0].parentNode, {\n filter: '.k-page',\n events: { }\n });\n\n that.pdfScroller.enablePanEventsTracking();\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 pageContainer = this.pageContainerWrapper;\n\n if (!page) {\n return;\n }\n\n\n this._pageNum = number;\n this._loadVisiblePages();\n\n this._preventScroll = true;\n scrollToPage(pageContainer[0], number - 1);\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.pdfScroller) {\n this.pdfScroller.destroy();\n }\n this.pageContainer.off(NS);\n this.pageContainerWrapper.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.pdfScroller)\n {\n this.pdfScroller.destroy();\n }\n },\n\n _toggleSelection: function(enable) {\n var that = this;\n\n if (enable === undefined$1) {\n enable = true;\n }\n\n if (that.pdfScroller) {\n enable ? that.pdfScroller.disablePanEventsTracking() : that.pdfScroller.enablePanEventsTracking();\n }\n\n that.pageContainer.toggleClass(styles.enableTextSelection, enable);\n that.pageContainer.toggleClass(styles.enablePanning, !enable);\n },\n\n\n _initSearchDOM: function() {\n var that = this;\n var promise = new Promise(function(resolve) {\n Promise.all(that._loadAllPages()).then(function() {\n that._searchDOM = new kendo.pdfviewer.SearchDOM({\n target: that._getTextLayers(),\n highlightClass: styles.highlightClass,\n charClass: styles.charClass\n });\n\n resolve();\n });\n });\n\n return promise;\n },\n\n _getTextLayers: function() {\n return this.pages.map(function(page) {\n return page.textLayer;\n });\n }\n });\n\n ui.plugin(PDFViewer);\n })(window.kendo.jQuery);\n var kendo$1 = kendo;\n\n return kendo$1;\n\n}));\n"]}