UNPKG

slickgrid

Version:

A lightning fast JavaScript grid/spreadsheet

9 lines 106 kB
/**
 * SlickGrid v3.0.2
 * (c) 2009-present Michael Leibman
 * homepage: http://github.com/mleibman/slickgrid
 * license: MIT
 * date: 2022-11-14
 * file: ./slick.grid-diag.js
 */
if("undefined"==typeof jQuery)throw new Error("SlickGrid requires jquery module to be loaded");if(!jQuery.fn.drag)throw new Error("SlickGrid requires jquery.event.drag module to be loaded");if("undefined"==typeof Slick)throw new Error("slick.core.js not loaded");!function($){"use strict";var scrollbarDimensions,maxSupportedCssHeight;function SlickGrid(container,data,columns,options){var defaults={alwaysShowVerticalScroll:!1,alwaysAllowHorizontalScroll:!1,explicitInitialization:!1,rowHeight:25,defaultColumnWidth:80,enableAddRow:!1,leaveSpaceForNewRows:!1,editable:!1,autoEdit:!0,suppressActiveCellChangeOnEdit:!1,enableCellNavigation:!0,enableColumnReorder:!0,asyncEditorLoading:!1,asyncEditorLoadDelay:100,forceFitColumns:!1,enableAsyncPostRender:!1,asyncPostRenderDelay:50,enableAsyncPostRenderCleanup:!1,asyncPostRenderCleanupDelay:40,autoHeight:!1,editorLock:Slick.GlobalEditorLock,showColumnHeader:!0,showHeaderRow:!1,headerRowHeight:25,createFooterRow:!1,showFooterRow:!1,footerRowHeight:25,createPreHeaderPanel:!1,showPreHeaderPanel:!1,preHeaderPanelHeight:25,showTopPanel:!1,topPanelHeight:25,formatterFactory:null,editorFactory:null,cellFlashingCssClass:"flashing",selectedCellCssClass:"selected",multiSelect:!0,enableTextSelectionOnCells:!1,dataItemColumnValueExtractor:null,frozenBottom:!1,frozenColumn:-1,frozenRow:-1,frozenRightViewportMinWidth:100,fullWidthRows:!1,multiColumnSort:!1,numberedMultiColumnSort:!1,tristateMultiColumnSort:!1,sortColNumberInSeparateSpan:!1,defaultFormatter:defaultFormatter,forceSyncScrolling:!1,addNewRowCssClass:"new-row",preserveCopiedSelectionOnPaste:!1,showCellSelection:!0,viewportClass:null,minRowBuffer:3,emulatePagingWhenScrolling:!0,editorCellNavOnLRKeys:!1,enableMouseWheelScrollHandler:!0,doPaging:!0,autosizeColsMode:Slick.GridAutosizeColsMode.LegacyOff,autosizeColPaddingPx:4,autosizeTextAvgToMWidthRatio:.75,viewportSwitchToScrollModeWidthPercent:void 0,viewportMinWidthPx:void 0,viewportMaxWidthPx:void 0,suppressCssChangesOnHiddenInit:!1,ffMaxSupportedCssHeight:6e6,maxSupportedCssHeight:1e9},columnDefaults={name:"",resizable:!0,sortable:!1,minWidth:30,maxWidth:void 0,rerenderOnResize:!1,headerCssClass:null,defaultSortAsc:!0,focusable:!0,selectable:!0},columnAutosizeDefaults={ignoreHeaderText:!1,colValueArray:void 0,allowAddlPercent:void 0,formatterOverride:void 0,autosizeMode:Slick.ColAutosizeMode.ContentIntelligent,rowSelectionModeOnInit:void 0,rowSelectionMode:Slick.RowSelectionMode.FirstNRows,rowSelectionCount:100,valueFilterMode:Slick.ValueFilterMode.None,widthEvalMode:Slick.WidthEvalMode.CanvasTextSize,sizeToRemaining:void 0,widthPx:void 0,colDataTypeOf:void 0},th,h,ph,n,cj,page=0,offset=0,vScrollDir=1,initialized=!1,$container,uid="slickgrid_"+Math.round(1e6*Math.random()),self=this,$focusSink,$focusSink2,$groupHeaders=$(),$headerScroller,$headers,$headerRow,$headerRowScroller,$headerRowSpacerL,$headerRowSpacerR,$footerRow,$footerRowScroller,$footerRowSpacerL,$footerRowSpacerR,$preHeaderPanel,$preHeaderPanelScroller,$preHeaderPanelSpacer,$preHeaderPanelR,$preHeaderPanelScrollerR,$preHeaderPanelSpacerR,$topPanelScroller,$topPanel,$viewport,$canvas,$style,$boundAncestors,treeColumns,stylesheet,columnCssRulesL,columnCssRulesR,viewportH,viewportW,canvasWidth,canvasWidthL,canvasWidthR,headersWidth,headersWidthL,headersWidthR,viewportHasHScroll,viewportHasVScroll,headerColumnWidthDiff=0,headerColumnHeightDiff=0,cellWidthDiff=0,cellHeightDiff=0,jQueryNewWidthBehaviour=!1,absoluteColumnMinWidth,hasFrozenRows=!1,frozenRowsHeight=0,actualFrozenRow=-1,paneTopH=0,paneBottomH=0,viewportTopH=0,viewportBottomH=0,topPanelH=0,headerRowH=0,footerRowH=0,tabbingDirection=1,$activeCanvasNode,$activeViewportNode,activePosX,activeRow,activeCell,activeCellNode=null,currentEditor=null,serializedEditorValue,editController,rowsCache={},renderedRows=0,numVisibleRows=0,prevScrollTop=0,scrollTop=0,lastRenderedScrollTop=0,lastRenderedScrollLeft=0,prevScrollLeft=0,scrollLeft=0,selectionModel,selectedRows=[],plugins=[],cellCssClasses={},columnsById={},sortColumns=[],columnPosLeft=[],columnPosRight=[],pagingActive=!1,pagingIsLastPage=!1,scrollThrottle=ActionThrottle(render,50),h_editorLoader=null,h_render=null,h_postrender=null,h_postrenderCleanup=null,postProcessedRows={},postProcessToRow=null,postProcessFromRow=null,postProcessedCleanupQueue=[],postProcessgroupId=0,counter_rows_rendered=0,counter_rows_removed=0,$paneHeaderL,$paneHeaderR,$paneTopL,$paneTopR,$paneBottomL,$paneBottomR,$headerScrollerL,$headerScrollerR,$headerL,$headerR,$groupHeadersL,$groupHeadersR,$headerRowScrollerL,$headerRowScrollerR,$footerRowScrollerL,$footerRowScrollerR,$headerRowL,$headerRowR,$footerRowL,$footerRowR,$topPanelScrollerL,$topPanelScrollerR,$topPanelL,$topPanelR,$viewportTopL,$viewportTopR,$viewportBottomL,$viewportBottomR,$canvasTopL,$canvasTopR,$canvasBottomL,$canvasBottomR,$viewportScrollContainerX,$viewportScrollContainerY,$headerScrollContainer,$headerRowScrollContainer,$footerRowScrollContainer,cssShow={position:"absolute",visibility:"hidden",display:"block"},$hiddenParents,oldProps=[],columnResizeDragging=!1;function init(){if(($container=container instanceof jQuery?container:$(container)).length<1)throw new Error("SlickGrid requires a valid container, "+container+" does not exist in the DOM.");if(maxSupportedCssHeight=maxSupportedCssHeight||getMaxSupportedCssHeight(),options=$.extend({},defaults,options),validateAndEnforceOptions(),columnDefaults.width=options.defaultColumnWidth,options.suppressCssChangesOnHiddenInit||cacheCssForHiddenInit(),treeColumns=new Slick.TreeColumns(columns),columns=treeColumns.extractColumns(),updateColumnProps(),options.enableColumnReorder&&!$.fn.sortable)throw new Error("SlickGrid's 'enableColumnReorder = true' option requires jquery-ui.sortable module to be loaded");if(editController={commitCurrentEdit:commitCurrentEdit,cancelCurrentEdit:cancelCurrentEdit},$container.empty().css("overflow","hidden").css("outline",0).addClass(uid).addClass("ui-widget"),/relative|absolute|fixed/.test($container.css("position"))||$container.css("position","relative"),$focusSink=$("<div tabIndex='0' hideFocus style='position:fixed;width:0;height:0;top:0;left:0;outline:0;'></div>").appendTo($container),$paneHeaderL=$("<div class='slick-pane slick-pane-header slick-pane-left' tabIndex='0' />").appendTo($container),$paneHeaderR=$("<div class='slick-pane slick-pane-header slick-pane-right' tabIndex='0' />").appendTo($container),$paneTopL=$("<div class='slick-pane slick-pane-top slick-pane-left' tabIndex='0' />").appendTo($container),$paneTopR=$("<div class='slick-pane slick-pane-top slick-pane-right' tabIndex='0' />").appendTo($container),$paneBottomL=$("<div class='slick-pane slick-pane-bottom slick-pane-left' tabIndex='0' />").appendTo($container),$paneBottomR=$("<div class='slick-pane slick-pane-bottom slick-pane-right' tabIndex='0' />").appendTo($container),options.createPreHeaderPanel&&($preHeaderPanelScroller=$("<div class='slick-preheader-panel ui-state-default' style='overflow:hidden;position:relative;' />").appendTo($paneHeaderL),$preHeaderPanel=$("<div />").appendTo($preHeaderPanelScroller),$preHeaderPanelSpacer=$("<div style='display:block;height:1px;position:absolute;top:0;left:0;'></div>").appendTo($preHeaderPanelScroller),$preHeaderPanelScrollerR=$("<div class='slick-preheader-panel ui-state-default' style='overflow:hidden;position:relative;' />").appendTo($paneHeaderR),$preHeaderPanelR=$("<div />").appendTo($preHeaderPanelScrollerR),$preHeaderPanelSpacerR=$("<div style='display:block;height:1px;position:absolute;top:0;left:0;'></div>").appendTo($preHeaderPanelScrollerR),options.showPreHeaderPanel||($preHeaderPanelScroller.hide(),$preHeaderPanelScrollerR.hide())),$headerScrollerL=$("<div class='slick-header ui-state-default slick-header-left' />").appendTo($paneHeaderL),$headerScrollerR=$("<div class='slick-header ui-state-default slick-header-right' />").appendTo($paneHeaderR),$headerScroller=$().add($headerScrollerL).add($headerScrollerR),treeColumns.hasDepth()){$groupHeadersL=[],$groupHeadersR=[];for(var e=0;e<treeColumns.getDepth()-1;e++)$groupHeadersL[e]=$("<div class='slick-group-header-columns slick-group-header-columns-left' style='left:-1000px' />").appendTo($headerScrollerL),$groupHeadersR[e]=$("<div class='slick-group-header-columns slick-group-header-columns-right' style='left:-1000px' />").appendTo($headerScrollerR);$groupHeaders=$().add($groupHeadersL).add($groupHeadersR)}$headerL=$("<div class='slick-header-columns slick-header-columns-left' style='left:-1000px' />").appendTo($headerScrollerL),$headerR=$("<div class='slick-header-columns slick-header-columns-right' style='left:-1000px' />").appendTo($headerScrollerR),$headers=$().add($headerL).add($headerR),$headerRowScrollerL=$("<div class='slick-headerrow ui-state-default' />").appendTo($paneTopL),$headerRowScrollerR=$("<div class='slick-headerrow ui-state-default' />").appendTo($paneTopR),$headerRowScroller=$().add($headerRowScrollerL).add($headerRowScrollerR),$headerRowSpacerL=$("<div style='display:block;height:1px;position:absolute;top:0;left:0;'></div>").appendTo($headerRowScrollerL),$headerRowSpacerR=$("<div style='display:block;height:1px;position:absolute;top:0;left:0;'></div>").appendTo($headerRowScrollerR),$headerRowL=$("<div class='slick-headerrow-columns slick-headerrow-columns-left' />").appendTo($headerRowScrollerL),$headerRowR=$("<div class='slick-headerrow-columns slick-headerrow-columns-right' />").appendTo($headerRowScrollerR),$headerRow=$().add($headerRowL).add($headerRowR),$topPanelScrollerL=$("<div class='slick-top-panel-scroller ui-state-default' />").appendTo($paneTopL),$topPanelScrollerR=$("<div class='slick-top-panel-scroller ui-state-default' />").appendTo($paneTopR),$topPanelScroller=$().add($topPanelScrollerL).add($topPanelScrollerR),$topPanelL=$("<div class='slick-top-panel' style='width:10000px' />").appendTo($topPanelScrollerL),$topPanelR=$("<div class='slick-top-panel' style='width:10000px' />").appendTo($topPanelScrollerR),$topPanel=$().add($topPanelL).add($topPanelR),options.showColumnHeader||$headerScroller.hide(),options.showTopPanel||$topPanelScroller.hide(),options.showHeaderRow||$headerRowScroller.hide(),$viewportTopL=$("<div class='slick-viewport slick-viewport-top slick-viewport-left' tabIndex='0' hideFocus />").appendTo($paneTopL),$viewportTopR=$("<div class='slick-viewport slick-viewport-top slick-viewport-right' tabIndex='0' hideFocus />").appendTo($paneTopR),$viewportBottomL=$("<div class='slick-viewport slick-viewport-bottom slick-viewport-left' tabIndex='0' hideFocus />").appendTo($paneBottomL),$viewportBottomR=$("<div class='slick-viewport slick-viewport-bottom slick-viewport-right' tabIndex='0' hideFocus />").appendTo($paneBottomR),$viewport=$().add($viewportTopL).add($viewportTopR).add($viewportBottomL).add($viewportBottomR),$activeViewportNode=$viewportTopL,$canvasTopL=$("<div class='grid-canvas grid-canvas-top grid-canvas-left' tabIndex='0' hideFocus />").appendTo($viewportTopL),$canvasTopR=$("<div class='grid-canvas grid-canvas-top grid-canvas-right' tabIndex='0' hideFocus />").appendTo($viewportTopR),$canvasBottomL=$("<div class='grid-canvas grid-canvas-bottom grid-canvas-left' tabIndex='0' hideFocus />").appendTo($viewportBottomL),$canvasBottomR=$("<div class='grid-canvas grid-canvas-bottom grid-canvas-right' tabIndex='0' hideFocus />").appendTo($viewportBottomR),options.viewportClass&&$viewport.toggleClass(options.viewportClass,!0),$canvas=$().add($canvasTopL).add($canvasTopR).add($canvasBottomL).add($canvasBottomR),scrollbarDimensions=scrollbarDimensions||measureScrollbar(),$activeCanvasNode=$canvasTopL,$preHeaderPanelSpacer&&$preHeaderPanelSpacer.css("width",getCanvasWidth()+scrollbarDimensions.width+"px"),$headers.width(getHeadersWidth()),$headerRowSpacerL.css("width",getCanvasWidth()+scrollbarDimensions.width+"px"),$headerRowSpacerR.css("width",getCanvasWidth()+scrollbarDimensions.width+"px"),options.createFooterRow&&($footerRowScrollerR=$("<div class='slick-footerrow ui-state-default' />").appendTo($paneTopR),$footerRowScrollerL=$("<div class='slick-footerrow ui-state-default' />").appendTo($paneTopL),$footerRowScroller=$().add($footerRowScrollerL).add($footerRowScrollerR),$footerRowSpacerL=$("<div style='display:block;height:1px;position:absolute;top:0;left:0;'></div>").css("width",getCanvasWidth()+scrollbarDimensions.width+"px").appendTo($footerRowScrollerL),$footerRowSpacerR=$("<div style='display:block;height:1px;position:absolute;top:0;left:0;'></div>").css("width",getCanvasWidth()+scrollbarDimensions.width+"px").appendTo($footerRowScrollerR),$footerRowL=$("<div class='slick-footerrow-columns slick-footerrow-columns-left' />").appendTo($footerRowScrollerL),$footerRowR=$("<div class='slick-footerrow-columns slick-footerrow-columns-right' />").appendTo($footerRowScrollerR),$footerRow=$().add($footerRowL).add($footerRowR),options.showFooterRow||$footerRowScroller.hide()),$focusSink2=$focusSink.clone().appendTo($container),options.explicitInitialization||finishInitialization()}function finishInitialization(){initialized||(initialized=!0,getViewportWidth(),getViewportHeight(),measureCellPaddingAndBorder(),disableSelection($headers),options.enableTextSelectionOnCells||$viewport.on("selectstart.ui",function(e){return $(e.target).is("input,textarea")}),setFrozenOptions(),setPaneVisibility(),setScroller(),setOverflow(),updateColumnCaches(),createColumnHeaders(),createColumnGroupHeaders(),createColumnFooter(),setupColumnSort(),createCssRules(),resizeCanvas(),bindAncestorScrollEvents(),$container.on("resize.slickgrid",resizeCanvas),$viewport.on("scroll",handleScroll),jQuery.fn.mousewheel&&options.enableMouseWheelScrollHandler&&$viewport.on("mousewheel",handleMouseWheel),$headerScroller.on("contextmenu",handleHeaderContextMenu).on("click",handleHeaderClick).on("mouseenter",".slick-header-column",handleHeaderMouseEnter).on("mouseleave",".slick-header-column",handleHeaderMouseLeave),$headerRowScroller.on("scroll",handleHeaderRowScroll),options.showHeaderRow&&$headerRow.on("mouseenter",".slick-headerrow-column",handleHeaderRowMouseEnter).on("mouseleave",".slick-headerrow-column",handleHeaderRowMouseLeave),options.createFooterRow&&($footerRow.on("contextmenu",handleFooterContextMenu).on("click",handleFooterClick),$footerRowScroller.on("scroll",handleFooterRowScroll)),options.createPreHeaderPanel&&$preHeaderPanelScroller.on("scroll",handlePreHeaderPanelScroll),$focusSink.add($focusSink2).on("keydown",handleKeyDown),$canvas.on("keydown",handleKeyDown).on("click",handleClick).on("dblclick",handleDblClick).on("contextmenu",handleContextMenu).on("draginit",handleDragInit).on("dragstart",{distance:3},handleDragStart).on("drag",handleDrag).on("dragend",handleDragEnd).on("mouseenter",".slick-cell",handleMouseEnter).on("mouseleave",".slick-cell",handleMouseLeave),options.suppressCssChangesOnHiddenInit||restoreCssFromHiddenInit())}function cacheCssForHiddenInit(){($hiddenParents=$container.parents().addBack().not(":visible")).each(function(){var e,o={};for(e in cssShow)o[e]=this.style[e],this.style[e]=cssShow[e];oldProps.push(o)})}function restoreCssFromHiddenInit(){$hiddenParents.each(function(e){var o,t=oldProps[e];for(o in cssShow)this.style[o]=t[o]})}function hasFrozenColumns(){return-1<options.frozenColumn}function registerPlugin(e){plugins.unshift(e),e.init(self)}function unregisterPlugin(e){for(var o=plugins.length;0<=o;o--)if(plugins[o]===e){plugins[o].destroy&&plugins[o].destroy(),plugins.splice(o,1);break}}function getPluginByName(e){for(var o=plugins.length-1;0<=o;o--)if(plugins[o].pluginName===e)return plugins[o]}function setSelectionModel(e){selectionModel&&(selectionModel.onSelectedRangesChanged.unsubscribe(handleSelectedRangesChanged),selectionModel.destroy&&selectionModel.destroy()),(selectionModel=e)&&(selectionModel.init(self),selectionModel.onSelectedRangesChanged.subscribe(handleSelectedRangesChanged))}function getSelectionModel(){return selectionModel}function getCanvasNode(e,o){return _getContainerElement(getCanvases(),e,o)}function getActiveCanvasNode(e){return setActiveCanvasNode(e),$activeCanvasNode[0]}function getCanvases(){return $canvas}function setActiveCanvasNode(e){e&&($activeCanvasNode=$(e.target).closest(".grid-canvas"))}function getViewportNode(e,o){return _getContainerElement(getViewports(),e,o)}function getViewports(){return $viewport}function getActiveViewportNode(e){return setActiveViewportNode(e),$activeViewportNode[0]}function setActiveViewportNode(e){e&&($activeViewportNode=$(e.target).closest(".slick-viewport"))}function _getContainerElement(e,o,t){if(e)return t=t||0,o="number"==typeof(o=o||0)?o:getColumnIndex(o),e[(hasFrozenRows&&t>=actualFrozenRow+(options.frozenBottom?0:1)?2:0)+(hasFrozenColumns()&&o>options.frozenColumn?1:0)]}function measureScrollbar(){var e=$('<div class="'+$viewport.className+'" style="position:absolute; top:-10000px; left:-10000px; overflow:auto; width:100px; height:100px;"></div>').appendTo("body"),o=$('<div style="width:200px; height:200px; overflow:auto;"></div>').appendTo(e),t={width:e[0].offsetWidth-e[0].clientWidth,height:e[0].offsetHeight-e[0].clientHeight};return o.remove(),e.remove(),t}function getHeadersWidth(){headersWidth=headersWidthL=headersWidthR=0;for(var e=!options.autoHeight,o=0,t=columns.length;o<t;o++){var n=columns[o].width;-1<options.frozenColumn&&o>options.frozenColumn?headersWidthR+=n:headersWidthL+=n}return e&&(-1<options.frozenColumn&&o>options.frozenColumn?headersWidthR+=scrollbarDimensions.width:headersWidthL+=scrollbarDimensions.width),hasFrozenColumns()?(headersWidthL+=1e3,headersWidthR=Math.max(headersWidthR,viewportW)+headersWidthL,headersWidthR+=scrollbarDimensions.width):(headersWidthL+=scrollbarDimensions.width,headersWidthL=Math.max(headersWidthL,viewportW)+1e3),headersWidth=headersWidthL+headersWidthR,Math.max(headersWidth,viewportW)+1e3}function getHeadersWidthL(){return headersWidthL=0,columns.forEach(function(e,o){-1<options.frozenColumn&&o>options.frozenColumn||(headersWidthL+=e.width)}),hasFrozenColumns()?headersWidthL+=1e3:(headersWidthL+=scrollbarDimensions.width,headersWidthL=Math.max(headersWidthL,viewportW)+1e3),headersWidthL}function getHeadersWidthR(){return headersWidthR=0,columns.forEach(function(e,o){-1<options.frozenColumn&&o>options.frozenColumn&&(headersWidthR+=e.width)}),hasFrozenColumns()&&(headersWidthR=Math.max(headersWidthR,viewportW)+getHeadersWidthL(),headersWidthR+=scrollbarDimensions.width),headersWidthR}function getCanvasWidth(){var e=viewportHasVScroll?viewportW-scrollbarDimensions.width:viewportW,o=columns.length;for(canvasWidthL=canvasWidthR=0;o--;)hasFrozenColumns()&&o>options.frozenColumn?canvasWidthR+=columns[o].width:canvasWidthL+=columns[o].width;var t=canvasWidthL+canvasWidthR;return options.fullWidthRows?Math.max(t,e):t}function updateCanvasWidth(e){var o=canvasWidth,t=canvasWidthL,n=canvasWidthR;((o=(canvasWidth=getCanvasWidth())!==o||canvasWidthL!==t||canvasWidthR!==n)||hasFrozenColumns()||hasFrozenRows)&&($canvasTopL.width(canvasWidthL),getHeadersWidth(),$headerL.width(headersWidthL),$headerR.width(headersWidthR),hasFrozenColumns()?($canvasTopR.width(canvasWidthR),$paneHeaderL.width(canvasWidthL),$paneHeaderR.css("left",canvasWidthL),$paneHeaderR.css("width",viewportW-canvasWidthL),$paneTopL.width(canvasWidthL),$paneTopR.css("left",canvasWidthL),$paneTopR.css("width",viewportW-canvasWidthL),$headerRowScrollerL.width(canvasWidthL),$headerRowScrollerR.width(viewportW-canvasWidthL),$headerRowL.width(canvasWidthL),$headerRowR.width(canvasWidthR),options.createFooterRow&&($footerRowScrollerL.width(canvasWidthL),$footerRowScrollerR.width(viewportW-canvasWidthL),$footerRowL.width(canvasWidthL),$footerRowR.width(canvasWidthR)),options.createPreHeaderPanel&&$preHeaderPanel.width(canvasWidth),$viewportTopL.width(canvasWidthL),$viewportTopR.width(viewportW-canvasWidthL),hasFrozenRows&&($paneBottomL.width(canvasWidthL),$paneBottomR.css("left",canvasWidthL),$viewportBottomL.width(canvasWidthL),$viewportBottomR.width(viewportW-canvasWidthL),$canvasBottomL.width(canvasWidthL),$canvasBottomR.width(canvasWidthR))):($paneHeaderL.width("100%"),$paneTopL.width("100%"),$headerRowScrollerL.width("100%"),$headerRowL.width(canvasWidth),options.createFooterRow&&($footerRowScrollerL.width("100%"),$footerRowL.width(canvasWidth)),options.createPreHeaderPanel&&($preHeaderPanel.width("100%"),$preHeaderPanel.width(canvasWidth)),$viewportTopL.width("100%"),hasFrozenRows&&($viewportBottomL.width("100%"),$canvasBottomL.width(canvasWidthL))),viewportHasHScroll=canvasWidth>=viewportW-scrollbarDimensions.width),$headerRowSpacerL.width(canvasWidth+(viewportHasVScroll?scrollbarDimensions.width:0)),$headerRowSpacerR.width(canvasWidth+(viewportHasVScroll?scrollbarDimensions.width:0)),options.createFooterRow&&($footerRowSpacerL.width(canvasWidth+(viewportHasVScroll?scrollbarDimensions.width:0)),$footerRowSpacerR.width(canvasWidth+(viewportHasVScroll?scrollbarDimensions.width:0))),(o||e)&&applyColumnWidths()}function disableSelection(e){e&&e.jquery&&e.attr("unselectable","on").css("MozUserSelect","none").on("selectstart.ui",function(){return!1})}function getMaxSupportedCssHeight(){for(var e=1e6,o=navigator.userAgent.toLowerCase().match(/firefox/)?options.ffMaxSupportedCssHeight:options.maxSupportedCssHeight,t=$("<div style='display:none' />").appendTo(document.body);;){var n=2*e;if(t.css("height",n),o<n||t.height()!==n)break;e=n}return t.remove(),e}function getUID(){return uid}function getHeaderColumnWidthDiff(){return headerColumnWidthDiff}function getScrollbarDimensions(){return scrollbarDimensions}function getDisplayedScrollbarDimensions(){return{width:viewportHasVScroll?scrollbarDimensions.width:0,height:viewportHasHScroll?scrollbarDimensions.height:0}}function getAbsoluteColumnMinWidth(){return absoluteColumnMinWidth}function bindAncestorScrollEvents(){for(var e,o=(hasFrozenRows&&!options.frozenBottom?$canvasBottomL:$canvasTopL)[0];(o=o.parentNode)!=document.body&&null!=o;)o!=$viewportTopL[0]&&o.scrollWidth==o.clientWidth&&o.scrollHeight==o.clientHeight||(e=$(o),$boundAncestors=$boundAncestors?$boundAncestors.add(e):e,e.on("scroll."+uid,handleActiveCellPositionChange))}function unbindAncestorScrollEvents(){$boundAncestors&&($boundAncestors.off("scroll."+uid),$boundAncestors=null)}function updateColumnHeader(e,o,t){var n,l;!initialized||null!=(e=getColumnIndex(e))&&(n=columns[e],(l=$headers.children().eq(e))&&(void 0!==o&&(columns[e].name=o),void 0!==t&&(columns[e].toolTip=t),trigger(self.onBeforeHeaderCellDestroy,{node:l[0],column:n,grid:self}),l.attr("title",t||"").children().eq(0).html(o),trigger(self.onHeaderCellRendered,{node:l[0],column:n,grid:self})))}function getHeader(e){return e?(e=getColumnIndex(e.id),!hasFrozenColumns()||e<=options.frozenColumn?$headerL:$headerR):hasFrozenColumns()?$headers:$headerL}function getHeaderColumn(e){var e="number"==typeof e?e:getColumnIndex(e),o=!hasFrozenColumns()||e<=options.frozenColumn?$headerL:$headerR,e=!hasFrozenColumns()||e<=options.frozenColumn?e:e-options.frozenColumn-1,o=o.children().eq(e);return o&&o[0]}function getHeaderRow(){return hasFrozenColumns()?$headerRow:$headerRow[0]}function getFooterRow(){return hasFrozenColumns()?$footerRow:$footerRow[0]}function getPreHeaderPanel(){return $preHeaderPanel[0]}function getPreHeaderPanelRight(){return $preHeaderPanelR[0]}function getHeaderRowColumn(e){var e="number"==typeof e?e:getColumnIndex(e),o=(!hasFrozenColumns()||e<=options.frozenColumn?o=$headerRowL:(o=$headerRowR,e-=options.frozenColumn+1),o.children().eq(e));return o&&o[0]}function getFooterRowColumn(e){var e="number"==typeof e?e:getColumnIndex(e),o=(!hasFrozenColumns()||e<=options.frozenColumn?o=$footerRowL:(o=$footerRowR,e-=options.frozenColumn+1),o&&o.children().eq(e));return o&&o[0]}function createColumnFooter(){if(options.createFooterRow){$footerRow.find(".slick-footerrow-column").each(function(){var e=$(this).data("column");e&&trigger(self.onBeforeFooterRowCellDestroy,{node:this,column:e,grid:self})}),$footerRowL.empty(),$footerRowR.empty();for(var e=0;e<columns.length;e++){var o=columns[e],t=$("<div class='ui-state-default slick-footerrow-column l"+e+" r"+e+"'></div>").data("column",o).addClass(hasFrozenColumns()&&e<=options.frozenColumn?"frozen":"").appendTo(hasFrozenColumns()&&e>options.frozenColumn?$footerRowR:$footerRowL);trigger(self.onFooterRowCellRendered,{node:t[0],column:o,grid:self})}}}function createColumnGroupHeaders(){var e=0,o=!1;if(treeColumns.hasDepth()){for(var t=0;t<$groupHeadersL.length;t++){$groupHeadersL[t].empty(),$groupHeadersR[t].empty();var n,l=treeColumns.getColumnsInDepth(t);for(n in l){var r=l[n];e+=r.extractColumns().length,hasFrozenColumns()&&0===t&&e-1===options.frozenColumn&&(o=!0),$("<div class='ui-state-default slick-group-header-column' />").html("<span class='slick-column-name'>"+r.name+"</span>").attr("id",""+uid+r.id).attr("title",r.toolTip||"").data("column",r).addClass(r.headerCssClass||"").addClass(hasFrozenColumns()&&e-1>options.frozenColumn?"frozen":"").appendTo((hasFrozenColumns()&&e-1>options.frozenColumn?$groupHeadersR:$groupHeadersL)[t])}if(hasFrozenColumns()&&0===t&&!o){$groupHeadersL[t].empty(),$groupHeadersR[t].empty(),alert("All columns of group should to be grouped!");break}}applyColumnGroupHeaderWidths()}}function createColumnHeaders(){function e(){$(this).addClass("ui-state-hover")}function o(){$(this).removeClass("ui-state-hover")}$headers.find(".slick-header-column").each(function(){var e=$(this).data("column");e&&trigger(self.onBeforeHeaderCellDestroy,{node:this,column:e,grid:self})}),$headerL.empty(),$headerR.empty(),getHeadersWidth(),$headerL.width(headersWidthL),$headerR.width(headersWidthR),$headerRow.find(".slick-headerrow-column").each(function(){var e=$(this).data("column");e&&trigger(self.onBeforeHeaderRowCellDestroy,{node:this,column:e,grid:self})}),$headerRowL.empty(),$headerRowR.empty(),options.createFooterRow&&($footerRowL.find(".slick-footerrow-column").each(function(){var e=$(this).data("column");e&&trigger(self.onBeforeFooterRowCellDestroy,{node:this,column:e,grid:self})}),$footerRowL.empty(),hasFrozenColumns()&&($footerRowR.find(".slick-footerrow-column").each(function(){var e=$(this).data("column");e&&trigger(self.onBeforeFooterRowCellDestroy,{node:this,column:e,grid:self})}),$footerRowR.empty()));for(var t=0;t<columns.length;t++){var n=columns[t],l=!hasFrozenColumns()||t<=options.frozenColumn?$headerL:$headerR,r=!hasFrozenColumns()||t<=options.frozenColumn?$headerRowL:$headerRowR,i=$("<div class='ui-state-default slick-header-column' />").html("<span class='slick-column-name'>"+n.name+"</span>").width(n.width-headerColumnWidthDiff).attr("id",""+uid+n.id).attr("title",n.toolTip||"").data("column",n).addClass(n.headerCssClass||"").addClass(hasFrozenColumns()&&t<=options.frozenColumn?"frozen":"").appendTo(l);if((options.enableColumnReorder||n.sortable)&&i.on("mouseenter",e).on("mouseleave",o),n.hasOwnProperty("headerCellAttrs")&&n.headerCellAttrs instanceof Object)for(var s in n.headerCellAttrs)n.headerCellAttrs.hasOwnProperty(s)&&i.attr(s,n.headerCellAttrs[s]);n.sortable&&(i.addClass("slick-header-sortable"),i.append("<span class='slick-sort-indicator"+(options.numberedMultiColumnSort&&!options.sortColNumberInSeparateSpan?" slick-sort-indicator-numbered":"")+"' />"),options.numberedMultiColumnSort&&options.sortColNumberInSeparateSpan&&i.append("<span class='slick-sort-indicator-numbered' />")),trigger(self.onHeaderCellRendered,{node:i[0],column:n,grid:self}),options.showHeaderRow&&(l=$("<div class='ui-state-default slick-headerrow-column l"+t+" r"+t+"'></div>").data("column",n).addClass(hasFrozenColumns()&&t<=options.frozenColumn?"frozen":"").appendTo(r),trigger(self.onHeaderRowCellRendered,{node:l[0],column:n,grid:self})),options.createFooterRow&&options.showFooterRow&&(r=$("<div class='ui-state-default slick-footerrow-column l"+t+" r"+t+"'></div>").data("column",n).appendTo($footerRow),trigger(self.onFooterRowCellRendered,{node:r[0],column:n,grid:self}))}setSortColumns(sortColumns),setupColumnResize(),options.enableColumnReorder&&("function"==typeof options.enableColumnReorder?options.enableColumnReorder(self,$headers,headerColumnWidthDiff,setColumns,setupColumnResize,columns,getColumnIndex,uid,trigger):setupColumnReorder())}function setupColumnSort(){$headers.click(function(e){if(!columnResizeDragging&&(e.metaKey=e.metaKey||e.ctrlKey,!$(e.target).hasClass("slick-resizable-handle"))){var o=$(e.target).closest(".slick-header-column");if(o.length){var t=o.data("column");if(t.sortable&&getEditorLock().commitCurrentEdit()){for(var o=$.extend(!0,[],sortColumns),n=null,l=0;l<sortColumns.length;l++)if(sortColumns[l].columnId==t.id){(n=sortColumns[l]).sortAsc=!n.sortAsc;break}var r=!!n;options.tristateMultiColumnSort?(n=n||{columnId:t.id,sortAsc:t.defaultSortAsc},r&&n.sortAsc&&(sortColumns.splice(l,1),n=null),options.multiColumnSort||(sortColumns=[]),!n||r&&options.multiColumnSort||sortColumns.push(n)):e.metaKey&&options.multiColumnSort?n&&sortColumns.splice(l,1):((e.shiftKey||e.metaKey)&&options.multiColumnSort||(sortColumns=[]),n?0===sortColumns.length&&sortColumns.push(n):(n={columnId:t.id,sortAsc:t.defaultSortAsc},sortColumns.push(n))),r=options.multiColumnSort?{multiColumnSort:!0,previousSortColumns:o,sortCols:$.map(sortColumns,function(e){return{columnId:columns[getColumnIndex(e.columnId)].id,sortCol:columns[getColumnIndex(e.columnId)],sortAsc:e.sortAsc}})}:{multiColumnSort:!1,previousSortColumns:o,columnId:0<sortColumns.length?t.id:null,sortCol:0<sortColumns.length?t:null,sortAsc:!(0<sortColumns.length)||sortColumns[0].sortAsc},!1!==trigger(self.onBeforeSort,r,e)&&(setSortColumns(sortColumns),trigger(self.onSort,r,e))}}}})}function currentPositionInHeader(o){var t=0;return $headers.find(".slick-header-column").each(function(e){if(this.id==o)return t=e,!1}),t}function limitPositionInGroup(t){var n,e=0,l=0;return treeColumns.getColumnsInDepth($groupHeadersL.length-1).some(function(o){return e=l,l+=o.columns.length,o.columns.some(function(e){return n=e.id===t?o:n}),n}),{start:e,end:--l,group:n}}function remove(e,o){var t=e.lastIndexOf(o);-1<t&&(e.splice(t,1),remove(e,o))}function columnPositionValidInGroup(e){var o=currentPositionInHeader(e[0].id),t=limitPositionInGroup(e.data("column").id),o=t.start<=o&&o<=t.end;return{limit:t,valid:o,message:o?"":'Column "'.concat(e.text(),'" can be reordered only within the "',t.group.name,'" group!')}}function setupColumnReorder(){$headers.filter(":ui-sortable").sortable("destroy");var t,s=null;function n(){$viewportScrollContainerX[0].scrollLeft=$viewportScrollContainerX[0].scrollLeft+10}function l(){$viewportScrollContainerX[0].scrollLeft=$viewportScrollContainerX[0].scrollLeft-10}$headers.sortable({containment:"parent",distance:3,axis:"x",cursor:"default",tolerance:"intersection",helper:"clone",placeholder:"slick-sortable-placeholder ui-state-default slick-header-column",start:function(e,o){o.placeholder.width(o.helper.outerWidth()-headerColumnWidthDiff),t=!hasFrozenColumns()||o.placeholder.offset().left+o.placeholder.width()>$viewportScrollContainerX.offset().left,$(o.helper).addClass("slick-header-column-active")},beforeStop:function(e,o){$(o.helper).removeClass("slick-header-column-active")},sort:function(e,o){s=t&&e.originalEvent.pageX>$container[0].clientWidth?s||setInterval(n,100):t&&e.originalEvent.pageX<$viewportScrollContainerX.offset().left?s||setInterval(l,100):(clearInterval(s),null)},stop:function(e,o){var t=!1,n=(clearInterval(s),s=null);if(treeColumns.hasDepth()&&(n=(o=columnPositionValidInGroup(o.item)).limit,(t=!o.valid)&&alert(o.message)),t||!getEditorLock().commitCurrentEdit())$(this).sortable("cancel");else{for(var l=(l=$headerL.sortable("toArray")).concat($headerR.sortable("toArray")),r=[],i=0;i<l.length;i++)r.push(columns[getColumnIndex(l[i].replace(uid,""))]);setColumns(r),trigger(self.onColumnsReordered,{impactedColumns:getImpactedColumns(n)}),e.stopPropagation(),setupColumnResize()}}})}function getImpactedColumns(e){var o=[];if(e)for(var t=e.start;t<=e.end;t++)o.push(columns[t]);else o=columns;return o}function setupColumnResize(){var d,c,u,h,p,w,t,n,m=0,i=$headers.children();i.find(".slick-resizable-handle").remove(),i.each(function(e,o){e>=columns.length||columns[e].resizable&&(void 0===t&&(t=e),n=e)}),void 0!==t&&i.each(function(a,e){a>=columns.length||a<t||options.forceFitColumns&&n<=a||($(e),$("<div class='slick-resizable-handle' />").appendTo(e).on("dragstart",function(e,o){if(!getEditorLock().commitCurrentEdit())return!1;h=e.pageX,m=0,$(this).parent().addClass("slick-header-column-active");var t=null,n=null;if(i.each(function(e,o){e>=columns.length||(columns[e].previousWidth=$(o).outerWidth())}),options.forceFitColumns)for(n=t=0,d=a+1;d<columns.length;d++)(u=columns[d]).resizable&&(null!==n&&(u.maxWidth?n+=u.maxWidth-u.previousWidth:n=null),t+=u.previousWidth-Math.max(u.minWidth||0,absoluteColumnMinWidth));var l=0,r=0;for(d=0;d<=a;d++)(u=columns[d]).resizable&&(null!==r&&(u.maxWidth?r+=u.maxWidth-u.previousWidth:r=null),l+=u.previousWidth-Math.max(u.minWidth||0,absoluteColumnMinWidth));null===t&&(t=1e5),null===l&&(l=1e5),null===n&&(n=1e5),null===r&&(r=1e5),w=h+Math.min(t,r),p=h-Math.min(l,n)}).on("drag",function(e,o){columnResizeDragging=!0;var t,n,l,r,e=Math.min(w,Math.max(p,e.pageX))-h,i=0,s=viewportHasVScroll?viewportW-scrollbarDimensions.width:viewportW;if(e<0){for(n=e,d=a;0<=d;d--)(u=columns[d]).resizable&&(t=Math.max(u.minWidth||0,absoluteColumnMinWidth),n&&u.previousWidth+n<t?(n+=u.previousWidth-t,u.width=t):(u.width=u.previousWidth+n,n=0));for(c=0;c<=a;c++)u=columns[c],hasFrozenColumns()&&c>options.frozenColumn?u.width:i+=u.width;if(options.forceFitColumns)for(n=-e,d=a+1;d<columns.length;d++)(u=columns[d]).resizable&&(n&&u.maxWidth&&u.maxWidth-u.previousWidth<n?(n-=u.maxWidth-u.previousWidth,u.width=u.maxWidth):(u.width=u.previousWidth+n,n=0),hasFrozenColumns()&&d>options.frozenColumn?u.width:i+=u.width);else for(d=a+1;d<columns.length;d++)u=columns[d],hasFrozenColumns()&&d>options.frozenColumn?u.width:i+=u.width;if(options.forceFitColumns)for(n=-e,d=a+1;d<columns.length;d++)(u=columns[d]).resizable&&(n&&u.maxWidth&&u.maxWidth-u.previousWidth<n?(n-=u.maxWidth-u.previousWidth,u.width=u.maxWidth):(u.width=u.previousWidth+n,n=0))}else{for(n=e,i=0,d=a;0<=d;d--)(u=columns[d]).resizable&&(n&&u.maxWidth&&u.maxWidth-u.previousWidth<n?(n-=u.maxWidth-u.previousWidth,u.width=u.maxWidth):(l=u.previousWidth+n,r=canvasWidthL+n,hasFrozenColumns()&&d<=options.frozenColumn?(m<l&&r<s-options.frozenRightViewportMinWidth&&(m=l),u.width=r+options.frozenRightViewportMinWidth>s?m:l):u.width=l,n=0));for(c=0;c<=a;c++)u=columns[c],hasFrozenColumns()&&c>options.frozenColumn?u.width:i+=u.width;if(options.forceFitColumns)for(n=-e,d=a+1;d<columns.length;d++)(u=columns[d]).resizable&&(t=Math.max(u.minWidth||0,absoluteColumnMinWidth),n&&u.previousWidth+n<t?(n+=u.previousWidth-t,u.width=t):(u.width=u.previousWidth+n,n=0),hasFrozenColumns()&&d>options.frozenColumn?u.width:i+=u.width);else for(d=a+1;d<columns.length;d++)u=columns[d],hasFrozenColumns()&&d>options.frozenColumn?u.width:i+=u.width}hasFrozenColumns()&&i!=canvasWidthL&&($headerL.width(i+1e3),$paneHeaderR.css("left",i)),applyColumnHeaderWidths(),applyColumnGroupHeaderWidths(),options.syncColumnCellResize&&applyColumnWidths(),trigger(self.onColumnsDrag,{triggeredByColumn:$(this).parent().attr("id").replace(uid,""),resizeHandle:$(this)})}).on("dragend",function(e,o){$(this).parent().removeClass("slick-header-column-active");var t,n=$(this).parent().attr("id").replace(uid,"");for(!0===trigger(self.onBeforeColumnsResize,{triggeredByColumn:n})&&(applyColumnHeaderWidths(),applyColumnGroupHeaderWidths()),d=0;d<columns.length;d++)u=columns[d],t=$(i[d]).outerWidth(),u.previousWidth!==t&&u.rerenderOnResize&&invalidateAllRows();updateCanvasWidth(!0),render(),trigger(self.onColumnsResized,{triggeredByColumn:n}),setTimeout(function(){columnResizeDragging=!1},300)}).on("dblclick",function(){var e=$(this).parent().attr("id").replace(uid,"");trigger(self.onColumnsResizeDblClick,{triggeredByColumn:e})}))})}function getVBoxDelta(t){var n=0;return t&&"function"==typeof t.css&&$.each(["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],function(e,o){n+=parseFloat(t.css(o))||0}),n}function setFrozenOptions(){var e;options.frozenColumn=0<=options.frozenColumn&&options.frozenColumn<columns.length?parseInt(options.frozenColumn):-1,-1<options.frozenRow?(hasFrozenRows=!0,frozenRowsHeight=options.frozenRow*options.rowHeight,e=getDataLength(),actualFrozenRow=options.frozenBottom?e-options.frozenRow:options.frozenRow):hasFrozenRows=!1}function setPaneVisibility(){hasFrozenColumns()?($paneHeaderR.show(),$paneTopR.show(),hasFrozenRows?($paneBottomL.show(),$paneBottomR.show()):($paneBottomR.hide(),$paneBottomL.hide())):($paneHeaderR.hide(),$paneTopR.hide(),$paneBottomR.hide(),hasFrozenRows?$paneBottomL.show():($paneBottomR.hide(),$paneBottomL.hide()))}function setOverflow(){$viewportTopL.css({"overflow-x":hasFrozenColumns()?hasFrozenRows&&!options.alwaysAllowHorizontalScroll?"hidden":"scroll":hasFrozenRows&&!options.alwaysAllowHorizontalScroll?"hidden":"auto","overflow-y":!hasFrozenColumns()&&options.alwaysShowVerticalScroll?"scroll":hasFrozenColumns()?"hidden":hasFrozenRows?"scroll":"auto"}),$viewportTopR.css({"overflow-x":hasFrozenColumns()?hasFrozenRows&&!options.alwaysAllowHorizontalScroll?"hidden":"scroll":hasFrozenRows&&!options.alwaysAllowHorizontalScroll?"hidden":"auto","overflow-y":options.alwaysShowVerticalScroll||(hasFrozenColumns(),hasFrozenRows)?"scroll":"auto"}),$viewportBottomL.css({"overflow-x":hasFrozenColumns()?hasFrozenRows&&!options.alwaysAllowHorizontalScroll?"scroll":"auto":(hasFrozenRows&&options.alwaysAllowHorizontalScroll,"auto"),"overflow-y":!hasFrozenColumns()&&options.alwaysShowVerticalScroll?"scroll":hasFrozenColumns()?"hidden":hasFrozenRows?"scroll":"auto"}),$viewportBottomR.css({"overflow-x":hasFrozenColumns()?hasFrozenRows&&!options.alwaysAllowHorizontalScroll?"scroll":"auto":(hasFrozenRows&&options.alwaysAllowHorizontalScroll,"auto"),"overflow-y":options.alwaysShowVerticalScroll?"scroll":(hasFrozenColumns(),"auto")}),options.viewportClass&&($viewportTopL.toggleClass(options.viewportClass,!0),$viewportTopR.toggleClass(options.viewportClass,!0),$viewportBottomL.toggleClass(options.viewportClass,!0),$viewportBottomR.toggleClass(options.viewportClass,!0))}function setScroller(){hasFrozenColumns()?($headerScrollContainer=$headerScrollerR,$headerRowScrollContainer=$headerRowScrollerR,$footerRowScrollContainer=$footerRowScrollerR,hasFrozenRows?options.frozenBottom?($viewportScrollContainerX=$viewportBottomR,$viewportScrollContainerY=$viewportTopR):$viewportScrollContainerX=$viewportScrollContainerY=$viewportBottomR:$viewportScrollContainerX=$viewportScrollContainerY=$viewportTopR):($headerScrollContainer=$headerScrollerL,$headerRowScrollContainer=$headerRowScrollerL,$footerRowScrollContainer=$footerRowScrollerL,hasFrozenRows?options.frozenBottom?($viewportScrollContainerX=$viewportBottomL,$viewportScrollContainerY=$viewportTopL):$viewportScrollContainerX=$viewportScrollContainerY=$viewportBottomL:$viewportScrollContainerX=$viewportScrollContainerY=$viewportTopL)}function measureCellPaddingAndBorder(){var e=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],o=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],t=$.fn.jquery.split("."),t=(jQueryNewWidthBehaviour=1==t[0]&&8<=t[1]||2<=t[0],n=$("<div class='ui-state-default slick-header-column' style='visibility:hidden'>-</div>").appendTo($headers),headerColumnWidthDiff=headerColumnHeightDiff=0,"border-box"!=n.css("box-sizing")&&"border-box"!=n.css("-moz-box-sizing")&&"border-box"!=n.css("-webkit-box-sizing")&&($.each(e,function(e,o){headerColumnWidthDiff+=parseFloat(n.css(o))||0}),$.each(o,function(e,o){headerColumnHeightDiff+=parseFloat(n.css(o))||0})),n.remove(),$("<div class='slick-row' />").appendTo($canvas)),n=$("<div class='slick-cell' id='' style='visibility:hidden'>-</div>").appendTo(t);cellWidthDiff=cellHeightDiff=0,"border-box"!=n.css("box-sizing")&&"border-box"!=n.css("-moz-box-sizing")&&"border-box"!=n.css("-webkit-box-sizing")&&($.each(e,function(e,o){cellWidthDiff+=parseFloat(n.css(o))||0}),$.each(o,function(e,o){cellHeightDiff+=parseFloat(n.css(o))||0})),t.remove(),absoluteColumnMinWidth=Math.max(headerColumnWidthDiff,cellWidthDiff)}function createCssRules(){$style=$("<style type='text/css' rel='stylesheet' />").appendTo($("head"));for(var e=options.rowHeight-cellHeightDiff,o=["."+uid+" .slick-group-header-column { left: 1000px; }","."+uid+" .slick-header-column { left: 1000px; }","."+uid+" .slick-top-panel { height:"+options.topPanelHeight+"px; }","."+uid+" .slick-preheader-panel { height:"+options.preHeaderPanelHeight+"px; }","."+uid+" .slick-headerrow-columns { height:"+options.headerRowHeight+"px; }","."+uid+" .slick-footerrow-columns { height:"+options.footerRowHeight+"px; }","."+uid+" .slick-cell { height:"+e+"px; }","."+uid+" .slick-row { height:"+options.rowHeight+"px; }"],t=0;t<columns.length;t++)o.push("."+uid+" .l"+t+" { }"),o.push("."+uid+" .r"+t+" { }");$style[0].styleSheet?$style[0].styleSheet.cssText=o.join(" "):$style[0].appendChild(document.createTextNode(o.join(" ")))}function getColumnCssRules(e){if(!stylesheet){for(var o=document.styleSheets,t=0;t<o.length;t++)if((o[t].ownerNode||o[t].owningElement)==$style[0]){stylesheet=o[t];break}if(!stylesheet)throw new Error("SlickGrid Cannot find stylesheet.");columnCssRulesL=[],columnCssRulesR=[];var n,l,r=stylesheet.cssRules||stylesheet.rules;for(t=0;t<r.length;t++){var i=r[t].selectorText;(n=/\.l\d+/.exec(i))?(l=parseInt(n[0].substr(2,n[0].length-2),10),columnCssRulesL[l]=r[t]):(n=/\.r\d+/.exec(i))&&(l=parseInt(n[0].substr(2,n[0].length-2),10),columnCssRulesR[l]=r[t])}}return{left:columnCssRulesL[e],right:columnCssRulesR[e]}}function removeCssRules(){$style.remove(),stylesheet=null}function destroy(e){getEditorLock().cancelCurrentEdit(),trigger(self.onBeforeDestroy,{});for(var o=plugins.length;o--;)unregisterPlugin(plugins[o]);options.enableColumnReorder&&$headers.filter(":ui-sortable").sortable("destroy"),unbindAncestorScrollEvents(),$container.off(".slickgrid"),removeCssRules(),$canvas.off(),$viewport.off(),$headerScroller.off(),$headerRowScroller.off(),$footerRow&&$footerRow.off(),$footerRowScroller&&$footerRowScroller.off(),$preHeaderPanelScroller&&$preHeaderPanelScroller.off(),$focusSink.off(),$(".slick-resizable-handle").off(),$(".slick-header-column").off(),$container.empty().removeClass(uid),e&&destroyAllElements()}function destroyAllElements(){$viewportScrollContainerY=$viewportScrollContainerX=$viewportBottomR=$viewportBottomL=$viewportTopR=$viewportTopL=$viewport=$paneBottomR=$paneBottomL=$paneTopR=$paneTopL=$paneHeaderR=$paneHeaderL=$topPanelR=$topPanelL=$topPanelScrollerR=$topPanelScrollerL=$style=$topPanelScroller=$topPanel=$preHeaderPanelSpacerR=$preHeaderPanelSpacer=$preHeaderPanelScrollerR=$preHeaderPanelScroller=$preHeaderPanelR=$preHeaderPanel=$footerRowScrollContainer=$footerRowScrollerR=$footerRowScrollerL=$footerRowScroller=$footerRowSpacerR=$footerRowSpacerL=$footerRowR=$footerRowL=$footerRow=$hiddenParents=$headerScrollerR=$headerScrollerL=$headerScroller=$headerScrollContainer=$headerRowScrollerR=$headerRowScrollerL=$headerRowScroller=$headerRowScrollContainer=$headerRowSpacerR=$headerRowSpacerL=$headerRowR=$headerRowL=$headerRow=$headers=$headerR=$headerL=$groupHeadersR=$groupHeadersL=$groupHeaders=$focusSink2=$focusSink=$container=$canvasBottomR=$canvasBottomL=$canvasTopR=$canvasTopL=$canvas=$boundAncestors=$activeViewportNode=$activeCanvasNode=null}var canvas=null,canvas_context=null;function autosizeColumn(e,o){var t=e;if("number"==typeof e)t=columns[e];else if("string"==typeof e)for(var n=0;n<columns.length;n++)columns[n].Id===e&&(t=columns[n]);getColAutosizeWidth(t,$(getCanvasNode(0,0)),o)}function autosizeColumns(e,o){if((e=e||options.autosizeColsMode)===Slick.GridAutosizeColsMode.LegacyForceFit||e===Slick.GridAutosizeColsMode.LegacyOff)legacyAutosizeColumns();else if(e!==Slick.GridAutosizeColsMode.None){(canvas=document.createElement("canvas"))&&canvas.getContext&&(canvas_context=canvas.getContext("2d"));var t,n=$(getCanvasNode(0,0)),l=viewportHasVScroll?viewportW-scrollbarDimensions.width:viewportW,r=0,i=0,s=0,a=0,d=0;for(f=0;f<columns.length;f++)getColAutosizeWidth(h=columns[f],n,o),d+=h.autoSize.autosizeMode===Slick.ColAutosizeMode.Locked?h.width:0,a+=h.autoSize.autosizeMode===Slick.ColAutosizeMode.Locked?h.width:h.minWidth,r+=h.autoSize.widthPx,i+=h.autoSize.sizeToRemaining?0:h.autoSize.widthPx,s+=h.autoSize.sizeToRemaining&&h.minWidth||0;var c,u=r-i;if(e===Slick.GridAutosizeColsMode.FitViewportToCols&&(c=r+scrollbarDimensions.width,e=Slick.GridAutosizeColsMode.IgnoreViewport,options.viewportMaxWidthPx&&c>options.viewportMaxWidthPx?(c=options.viewportMaxWidthPx,e=Slick.GridAutosizeColsMode.FitColsToViewport):options.viewportMinWidthPx&&c<options.viewportMinWidthPx&&(c=options.viewportMinWidthPx,e=Slick.GridAutosizeColsMode.FitColsToViewport),$container.width(c)),e===Slick.GridAutosizeColsMode.FitColsToViewport)if(0<u&&i<l-s)for(f=0;f<columns.length;f++){var h,p=(h=columns[f]).autoSize.sizeToRemaining?(l-i)*h.autoSize.widthPx/u:h.autoSize.widthPx;h.rerenderOnResize&&h.width!=p&&(t=!0),h.width=p}else if(options.viewportSwitchToScrollModeWidthPercent&&i+s>l*options.viewportSwitchToScrollModeWidthPercent/100||l<a)e=Slick.GridAutosizeColsMode.IgnoreViewport;else for(var w=i-d,m=l-d-s,f=0;f<columns.length;f++)p=(h=columns[f]).width,h.autoSize.autosizeMode!==Slick.ColAutosizeMode.Locked&&(h.autoSize.sizeToRemaining?p=h.minWidth:((p=m/w*h.autoSize.widthPx)<h.minWidth&&(p=h.minWidth),w-=h.autoSize.widthPx,m-=p)),h.rerenderOnResize&&h.width!=p&&(t=!0),h.width=p;if(e===Slick.GridAutosizeColsMode.IgnoreViewport)for(f=0;f<columns.length;f++)p=columns[f].autoSize.widthPx,columns[f].rerenderOnResize&&columns[f].width!=p&&(t=!0),columns[f].width=p;reRenderColumns(t)}}function LogColWidths(){for(var e="Col Widths:",o=0;o<columns.length;o++)e+=" "+columns[o].width;console.log(e)}function getColAutosizeWidth(e,o,t){var n,l,r=e.autoSize;r.widthPx=e.width,r.autosizeMode!==Slick.ColAutosizeMode.Locked&&r.autosizeMode!==Slick.ColAutosizeMode.Guide&&(l=getDataLength(),r.autosizeMode===Slick.ColAutosizeMode.ContentIntelligent&&(n=r.colDataTypeOf,0<l&&((l=getDataItem(0))&&"object"===(n=typeof(l=l[e.field]))&&(l instanceof Date&&(n="date"),"undefined"!=typeof moment&&l instanceof moment&&(n="moment"))),"boolean"===n&&(r.colValueArray=[!0,!1]),"number"===n&&(r.valueFilterMode=Slick.ValueFilterMode.GetGreatestAndSub,r.rowSelectionMode=Slick.RowSelectionMode.AllRows),"string"===n&&(r.valueFilterMode=Slick.ValueFilterMode.GetLongestText,r.rowSelectionMode=Slick.RowSelectionMode.AllRows,r.allowAddlPercent=5),"date"===n&&(r.colValueArray=[new Date(2009,8,30,12,20,20)]),"moment"===n&&"undefined"!=typeof moment&&(r.colValueArray=[moment([2009,8,30,12,20,20])])),l=(l=getColContentSize(e,o,t))*(r.allowAddlPercent?1+r.allowAddlPercent/100:1)+options.autosizeColPaddingPx,e.minWidth&&l<e.minWidth&&(l=e.minWidth),e.maxWidth&&l>e.maxWidth&&(l=e.maxWidth),r.widthPx=l)}function getColContentSize(e,o,t){var n,l=e.autoSize,r=1,i=0,s=0;if(0===(s=l.ignoreHeaderText?s:getColHeaderWidth(e))&&(s=e.width||e.maxWidth||e.minWidth||20),l.colValueArray)i=getColWidth(e,o,l.colValueArray);else{var a=getData();if(0===(a=a.getItems?a.getItems():a).length)return s;t=(t?l.rowSelectionModeOnInit:void 0)||l.rowSelectionMode;if(t===Slick.RowSelectionMode.FirstRow&&(a=a.slice(0,1)),t===Slick.RowSelectionMode.LastRow&&(a=a.slice(a.length-1,a.length)),t===Slick.RowSelectionMode.FirstNRows&&(a=a.slice(0,l.rowSelectionCount)),l.valueFilterMode===Slick.ValueFilterMode.DeDuplicate){var d={};for(c=0,n=a.length;c<n;c++)d[a[c][e.field]]=!0;if(Object.keys)a=Object.keys(d);else for(var c in a=[],d)a.push(c)}if(l.valueFilterMode===Slick.ValueFilterMode.GetGreatestAndSub){var u=0,h=0;for(c=0,n=a.length;c<n;c++)w=a[c][e.field],Math.abs(w)>h&&(u=w,h=Math.abs(w));u=""+u,a=[u=+(u=Array(u.length+1).join("9"))]}if(l.valueFilterMode===Slick.ValueFilterMode.GetLongestTextAndSub){var p=0;for(c=0,n=a.length;c<n;c++)((w=a[c][e.field])||"").length>p&&(p=w.length);w=Array(p+1).join("m"),r=options.autosizeTextAvgToMWidthRatio,a=[w]}if(l.valueFilterMode===Slick.ValueFilterMode.GetLongestText){var w="",p=0,m=0;for(c=0,n=a.length;c<n;c++)((w=a[c][e.field])||"").length>p&&(p=w.length,m=c);a=[w=a[m][e.field]]}i=getColWidth(e,o,a)*r}return Math.max(s,i)}function getColWidth(t,e,o){var n=getColumnIndex(t.id),l=$('<div class="slick-row ui-widget-content"></div>'),r=$('<div class="slick-cell"></div>');r.css({position:"absolute",visibility:"hidden","text-overflow":"initial","white-space":"nowrap"}),l.append(r),e.append(l);var i,s,a,d,c=0;return canvas_context&&t.autoSize.widthEvalMode===Slick.WidthEvalMode.CanvasTextSize?(canvas_context.font=r.css("font-size")+" "+r.css("font-family"),$(o).each(function(e,o){d=Array.isArray(o)?o[t.field]:o,i=(s=""+d)?canvas_context.measureText(s).width:0,c<i&&(c=i,a=s)}),r.html(a),i=r.outerWidth(),l.remove(),r=null,i):($(o).each(function(e,o){d=Array.isArray(o)?o[t.field]:o,applyFormatResultToCellNode(t.formatterOverride?t.formatterOverride(e,n,d,t,o,self):t.formatter?t.formatter(e,n,d,t,o,self):""+d,r[0]),i=r.outerWidth(),c<i&&(c=i)}),l.remove(),r=null,c)}function getColHeaderWidth(e){var o,t=0,n=getUID()+e.id,l=document.getElementById(n),n=n+"_";return l?((o=l.cloneNode(!0)).id=n,o.style.cssText="position: absolute; visibility: hidden;right: auto;text-overflow: initial;white-space: nowrap;",l.parentNode.insertBefore(o,l),t=o.offsetWidth,o.parentNode.removeChild(o)):(o=getHeader(e),t=(l=$("<div class='ui-state-default slick-header-column' />").html("<span class='slick-column-name'>"+e.name+"</span>").attr("id",n).css({position:"absolute",visibility:"hidden",right:"auto","text-overflow:":"initial","white-space":"nowrap"}).addClass(e.headerCssClass||"").appendTo(o))[0].offsetWidth,o[0].removeChild(l[0])),t}function legacyAutosizeColumns(){var e,o=[],t=0,n=0,l=viewportHasVScroll?viewportW-scrollbarDimensions.width:viewportW;for(i=0;i<columns.length;i++)d=columns[i],o.push(d.width),n+=d.width,d.resizable&&(t+=d.width-Math.max(d.minWidth,absoluteColumnMinWidth));for(e=n;l<n&&t;){for(var r=(n-l)/t,i=0;i<columns.length&&l<n;i++){var s,a,d=columns[i],c=o[i];!d.resizable||c<=d.minWidth||c<=absoluteColumnMinWidth||(s=Math.max(d.minWidth,absoluteColumnMinWidth),a=Math.floor(r*(c-s))||1,n-=a=Math.min(a,c-s),t-=a,o[i]-=a)}if(e<=n)break;e=n}for(e=n;n<l;){var u=l/n;for(i=0;i<columns.length&&n<l;i++){d=columns[i];var h=o[i],h=!d.resizable||d.maxWidth<=h?0:Math.min(Math.floor(u*h)-h,d.maxWidth-h||1e6)||1;n+=h,o[i]+=n<=l?h:0}if(n<=e)break;e=n}var p=!1;for(i=0;i<columns.length;i++)columns[i].rerenderOnResize&&columns[i].width!=o[i]&&(p=!0),columns[i].width=o[i];reRenderColumns(p)}function reRenderColumns(e){applyColumnHeaderWidths(),applyColumnGroupHeaderWidths(),updateCanvasWidth(!0),trigger(self.onAutosizeColumns,{columns:columns}),e&&(invalidateAllRows(),render())}function trigger(e,o,t){return t=t||new Slick.EventData,(o=o||{}).grid=self,e.notify(o,t,self)}function getEditorLock(){return options.editorLock}function getEditController(){return editController}function getColumnIndex(e){return columnsById[e]}function applyColumnGroupHeaderWidths(){if(treeColumns.hasDepth())for(var e=$groupHeadersL.length-1;0<=e;e--){treeColumns.getColumnsInDepth(e);$().add($groupHeadersL[e]).add($groupHeadersR[e]).each(function(e){var t=$(this),n=0;t.width((0===e?getHeadersWidthL:getHeadersWidthR)()),t.children().each(function(){var e=$(this),o=$(this).data("column");o.width=0,o.columns.forEach(function(){var e=t.next().children(":eq("+n+++")");o.width+=e.outerWidth()}),e.width(o.width-headerColumnWidthDiff)})})}}function applyColumnHeaderWidths(){if(initialized){for(var e,o=0,t=$headers.children(),n=columns.length;o<n;o++)e=$(t[o]),jQueryNewWidthBehaviour?e.outerWidth()!==columns[o].width&&e.outerWidth(columns[o].width):e.width()!==columns[o].width-headerColumnWidthDiff&&e.width(columns[o].width-headerColumnWidthDiff);updateColumnCaches()}}function applyColumnWidths(){for(var e,o,t=0,n=0;n<columns.length;n++)e=columns[n].width,(o=getColumnCssRules(n)).left.style.left=t+"px",o.right.style.right=(-1!=options.frozenColumn&&n>options.frozenColumn?canvasWidthR:canvasWidthL)-t-e+"px",options.frozenColumn==n?t=0:t+=columns[n].width}function setSortColumn(e,o){setSortColumns([{columnId:e,sortAsc:o}])}function setSortColumns(e){sortColumns=e;var n=options.numberedMultiColumnSort&&1<sortColumns.length,l=$headers.children();l.removeClass("slick-header-column-sorted").find(".slick-sort-indicator").removeClass("slick-sort-indicator-asc slick-sort-indicator-desc"),l.find(".slick-sort-indicator-numbered").text(""),$.each(sortColumns,function(e,o){null==o.sortAsc&&(o.sortAsc=!0);var t=getColumnIndex(o.columnId);null!=t&&(l.eq(t).addClass("slick-header-column-sorted").find(".slick-sort-indicator").addClass(o.sortAsc?"slick-sort-indicator-asc":"slick-sort-indicator-desc"),n&&l.eq(t).find(".slick-sort-indicator-numbered").text(e+1))})}function getSortColumns(){return sortColumns}function handleSelectedRangesChanged(e,o){for(var t,n,l,r=selectedRows.slice(0),i=(selectedRows=[],{}),s=0;s<o.length;s++)for(var a=o[s].fromRow;a<=o[s].toRow;a++){i[a]||(selectedRows.push(a),i[a]={});for(var d=o[s].fromCell;d<=o[s].toCell;d++)canCellBeSelected(a,d)&&(i[a][columns[d].id]=options.selectedCellCssClass)}setCellCssStyles(options.selectedCellCssClass,i),simpleArrayEquals(r,selectedRows)&&(t=e&&e.detail&&e.detail.caller||"click",n=getSelectedRows().filter(function(e){return r.indexOf(e)<0}),l=r.filter(function(e){return getSelectedRows().indexOf(e)<0}),trigger(self.onSelectedRowsChanged,{rows:getSelectedRows(),previousSelectedRows:r,caller:t,changedSelectedRows:n,changedUnselectedRows:l},e))}function simpleArrayEquals(e,o){return Array.isArray(e)&&Array.isArray(o)&&o.sort().toString()!==e.sort().toString()}function getColumns(){return columns}function updateColumnCaches(){columnPosLeft=[],columnPosRight=[];for(var e=0,o=0,t=columns.length;o<t;o++)columnPosLeft[o]=e,columnPosRight[o]=e+columns[o].width,options.frozenColumn==o?e=0:e+=columns[o].width}function updateColumnProps(){columnsById={};for(var e=0;e<columns.length;e++){columns[e].width&&(columns[e].widthRequest=columns[e].width);var o=columns[e]=$.extend({},columnDefaults,columns[e]);o.autoSize=$.extend({},columnAutosizeDefaults,o.autoSize),columnsById[o.id]=e,o.minWidth&&o.width<o.minWidth&&(o.width=o.minWidth),o.maxWidth&&o.width>o.maxWidth&&(o.width=o.maxWidth),o.resizable}}function setColumns(e){trigger(self.onBeforeSetColumns,{previousColumns:columns,newColumns:e,grid:self});var o=new Slick.TreeColumns(e);columns=o.hasDepth()?(treeColumns=o).extractColumns():e,updateColumnProps(),updateColumnCaches(),initialized&&(setPaneVisibility(),setOverflow(),invalidateAllRows(),createColumnHeaders(),createColumnGroupHeaders(),createColumnFooter(),removeCssRules(),createCssRules(),resizeCanvas(),updateCanvasWidth(),applyColumnHeaderWidths(),applyColumnWidths(),handleScroll(),getSelectionModel()&&getSelectionModel().refreshSelections&&getSelectionModel().refreshSelections())}function getOptions(){return options}function setOptions(e,o,t,n){var l;getEditorLock().commitCurrentEdit()&&(makeActiveCellNormal(),void 0!==e.showColumnHeader&&setColumnHeaderVisibility(e.showColumnHeader),options.enableAddRow!==e.enableAddRow&&invalidateRow(getDataLength()),l=$.extend(!0,{},options),options=$.extend(options,e),trigger(self.onSetOptions,{optionsBefore:l,optionsAfter:options}),validateAndEnforceOptions(),$viewport.css("overflow-y",options.autoHeight?"hidden":"auto"),o||render(),setFrozenOptions(),setScroller(),n||setOverflow(),t||setColumns(treeColumns.extractColumns()),options.enableMouseWheelScrollHandler&&$viewport&&jQuery.fn.mousewheel?(e=$._data($viewport[0],"events"))&&e.mousewheel||$viewport.on("mousewheel",handleMouseWheel):!1===options.enableMouseWheelScrollHandler&&$viewport.off("mousewheel"))}function validateAndEnforceOptions(){options.autoHeight&&(options.leaveSpaceForNewRows=!1),options.forceFitColumns&&(options.autosizeColsMode=Slick.GridAutosizeColsMode.LegacyForceFit,console.log("forceFitColumns option is deprecated - use autosizeColsMode"))}function setData(e,o){data=e,invalidateAllRows(),updateRowCount(),o&&scrollTo(0)}function getData(){return data}function getDataLength(){return data.getLength?data.getLength():data&&data.length||0}function getDataLengthIncludingAddNew(){return getDataLength()+(options.enableAddRow&&(!pagingActive||pagingIsLastPage)?1:0)}function getDataItem(e){return data.getItem?data.getItem(e):data[e]}function getTopPanel(){return $topPanel[0]}function setTopPanelVisibility(e,o){o=!1!==o;options.showTopPanel!=e&&((options.showTopPanel=e)?o?$topPanelScroller.slideDown("fast",resizeCanvas):($topPanelScroller.show(),resizeCanvas()):o?$topPanelScroller.slideUp("fast",resizeCanvas):($topPanelScroller.hide(),resizeCanvas()))}function setHeaderRowVisibility(e,o){o=!1!==o;options.showHeaderRow!=e&&((options.showHeaderRow=e)?o?$headerRowScroller.slideDown("fast",resizeCanvas):($headerRowScroller.show(),resizeCanvas()):o?$headerRowScroller.slideUp("fast",resizeCanvas):($headerRowScroller.hide(),resizeCanvas()))}function setColumnHeaderVisibility(e,o){options.showColumnHeader!=e&&((options.showColumnHeader=e)?o?$headerScroller.slideDown("fast",resizeCanvas):($headerScroller.show(),resizeCanvas()):o?$headerScroller.slideUp("fast",resizeCanvas):($headerScroller.hide(),resizeCanvas()))}function setFooterRowVisibility(e,o){o=!1!==o;options.showFooterRow!=e&&((options.showFooterRow=e)?o?$footerRowScroller.slideDown("fast",resizeCanvas):($footerRowScroller.show(),resizeCanvas()):o?$footerRowScroller.slideUp("fast",resizeCanvas):($footerRowScroller.hide(),resizeCanvas()))}function setPreHeaderPanelVisibility(e,o){o=!1!==o;options.showPreHeaderPanel!=e&&((options.showPreHeaderPanel=e)?o?($preHeaderPanelScroller.slideDown("fast",resizeCanvas),$preHeaderPanelScrollerR.slideDown("fast",resizeCanvas)):($preHeaderPanelScroller.show(),$preHeaderPanelScrollerR.show(),resizeCanvas()):o?($preHeaderPanelScroller.slideUp("fast",resizeCanvas),$preHeaderPanelScrollerR.slideUp("fast",resizeCanvas)):($preHeaderPanelScroller.hide(),$preHeaderPanelScrollerR.hide(),resizeCanvas()))}function getContainerNode(){return $container.get(0)}function getRowTop(e){return options.rowHeight*e-offset}function getRowFromPosition(e){return Math.floor((e+offset)/options.rowHeight)}function scrollTo(e){e=Math.max(e,0),e=Math.min(e,th-$viewportScrollContainerY.height()+(viewportHasHScroll||hasFrozenColumns()?scrollbarDimensions.height:0));var o=offset,e=(page=Math.min(n-1,Math.floor(e/ph)),e-(offset=Math.round(page*cj)));console.log("scrollTo - offset "+offset+", diff: "+(offset-o)),offset!=o&&(cleanupRows(getVisibleRange(e)),updateRowPositions()),prevScrollTop!=e&&(vScrollDir=prevScrollTop+o<e+offset?1:-1,lastRenderedScrollTop=scrollTop=prevScrollTop=e,hasFrozenColumns()&&($viewportTopL[0].scrollTop=e),hasFrozenRows&&($viewportBottomL[0].scrollTop=$viewportBottomR[0].scrollTop=e),$viewportScrollContainerY[0].scrollTop=e,trigger(self.onViewportChanged,{}))}function defaultFormatter(e,o,t,n,l,r){return null==t?"":(t+"").replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function getFormatter(e,o){var e=data.getItemMetadata&&data.getItemMetadata(e),t=e&&e.columns&&(e.columns[o.id]||e.columns[getColumnIndex(o.id)]);return t&&t.formatter||e&&e.formatter||o.formatter||options.formatterFactory&&options.formatterFactory.getFormatter(o)||options.defaultFormatter}function getEditor(e,o){var t=columns[o],e=data.getItemMetadata&&data.getItemMetadata(e),e=e&&e.columns;return e&&e[t.id]&&void 0!==e[t.id].editor?e[t.id].editor:e&&e[o]&&void 0!==e[o].editor?e[o].editor:t.editor||options.editorFactory&&options.editorFactory.getEditor(t)}function getDataItemValueForColumn(e,o){return options.dataItemColumnValueExtractor?options.dataItemColumnValueExtractor(e,o):e[o.field]}function appendRowHtml(e,o,t,n,l){var r=getDataItem(t),l="slick-row"+(hasFrozenRows&&t<=options.frozenRow?" frozen":"")+(t<l&&!r?" loading":"")+(t===activeRow&&options.showCellSelection?" active":"")+(t%2==1?" odd":" even"),i=(r||(l+=" "+options.addNewRowCssClass),data.getItemMetadata&&data.getItemMetadata(t)),s=(i&&i.cssClasses&&(l+=" "+i.cssClasses),getFrozenRowOffset(t)),l="<div class='ui-widget-content "+l+"' style='top:"+(getRowTop(t)-s)+"px'>";e.push(l),hasFrozenColumns()&&o.push(l);for(var a=0,d=columns.length;a<d;a++){var c,u,h=columns[a];if(u=1,i&&i.columns&&("*"===(u=(c=i.columns[h.id]||i.columns[a])&&c.colspan||1)&&(u=d-a)),columnPosRight[Math.min(d-1,a+u-1)]>n.leftPx){if(!h.alwaysRenderColumn&&columnPosLeft[a]>n.rightPx)break;hasFrozenColumns()&&a>options.frozenColumn?appendCellHtml(o,t,a,u,r):appendCellHtml(e,t,a,u,r)}else(h.alwaysRenderColumn||hasFrozenColumns()&&a<=options.frozenColumn)&&appendCellHtml(e,t,a,u,r);1<u&&(a+=u-1)}e.push("</div>"),hasFrozenColumns()&&o.push("</div>")}function appendCellHtml(e,o,t,n,l){var r=columns[t],i="slick-cell l"+t+" r"+Math.min(columns.length-1,t+n-1)+(r.cssClass?" "+r.cssClass:"");for(u in hasFrozenColumns()&&t<=options.frozenColumn&&(i+=" frozen"),o===activeRow&&t===activeCell&&options.showCellSelection&&(i+=" active"),cellCssClasses)cellCssClasses[u][o]&&cellCssClasses[u][o][r.id]&&(i+=" "+cellCssClasses[u][o][r.id]);var s=null,a="",s=(l&&(s=getDataItemValueForColumn(l,r),null==(a=getFormatter(o,r)(o,t,s,r,l,self))&&(a="")),trigger(self.onBeforeAppendCell,{row:o,cell:t,value:s,dataContext:l})||""),d=(s+=a&&a.addClasses?(s?" ":"")+a.addClasses:"",a&&a.toolTip?"title='"+a.toolTip+"'":""),c="";if(r.hasOwnProperty("cellAttrs")&&r.cellAttrs instanceof Object)for(var u in r.cellAttrs)r.cellAttrs.hasOwnProperty(u)&&(c+=" "+u+'="'+r.cellAttrs[u]+'" ');e.push("<div class='"+i+(s?" "+s:"")+"' "+d+c+">"),l&&e.push("[object Object]"!==Object.prototype.toString.call(a)?a:a.text),e.push("</div>"),rowsCache[o].cellRenderQueue.push(t),rowsCache[o].cellColSpans[t]=n}function cleanupRows(e){for(var o in rowsCache){var t=!0;hasFrozenRows&&(options.frozenBottom&&actualFrozenRow<=o||!options.frozenBottom&&o<=actualFrozenRow)&&(t=!1),(o=parseInt(o,10))!==activeRow&&(o<e.top||o>e.bottom)&&t&&removeRowFromCache(o)}options.enableAsyncPostRenderCleanup&&startPostProcessingCleanup()}function invalidate(){updateRowCount(),invalidateAllRows(),render()}function invalidateAllRows(){for(var e in currentEditor&&makeActiveCellNormal(),rowsCache)removeRowFromCache(e);options.enableAsyncPostRenderCleanup&&startPostProcessingCleanup()}function queuePostProcessedRowForCleanup(e,o,t){for(var n in postProcessgroupId++,o)o.hasOwnProperty(n)&&postProcessedCleanupQueue.push({actionType:"C",groupId:postProcessgroupId,node:e.cellNodesByColumnIdx[0|n],columnIdx:0|n,rowIdx:t});postProcessedCleanupQueue.push({actionType:"R",groupId:postProcessgroupId,node:e.rowNode}),e.rowNode.detach()}function queuePostProcessedCellForCleanup(e,o,t){postProcessedCleanupQueue.push({actionType:"C",groupId:postProcessgroupId,node:e,columnIdx:o,rowIdx:t}),$(e).detach()}function removeRowFromCache(e){var o=rowsCache[e];o&&(options.enableAsyncPostRenderCleanup&&postProcessedRows[e]?queuePostProcessedRowForCleanup(o,postProcessedRows[e],e):o.rowNode.each(function(){this.parentElement&&this.parentElement.removeChild(this)}),delete rowsCache[e],delete postProcessedRows[e],renderedRows--,counter_rows_removed++)}function invalidateRows(e){var o,t;if(e&&e.length){for(vScrollDir=0,t=e.length,o=0;o<t;o++)currentEditor&&activeRow===e[o]&&makeActiveCellNormal(),rowsCache[e[o]]&&removeRowFromCache(e[o]);options.enableAsyncPostRenderCleanup&&startPostProcessingCleanup()}}function invalidateRow(e){!e&&0!==e||invalidateRows([e])}function applyFormatResultToCellNode(e,o,t){null==e&&(e=""),"[object Object]"!==Object.prototype.toString.call(e)?o.innerHTML=sanitizeHtmlString(e):(o.innerHTML=sanitizeHtmlString(e.text),e.removeClasses&&!t&&$(o).removeClass(e.removeClasses),e.addClasses&&$(o).addClass(e.addClasses),e.toolTip&&$(o).attr("title",e.toolTip))}function updateCell(e,o){var t,n,l=getCellNode(e,o);l&&(t=columns[o],n=getDataItem(e),currentEditor&&activeRow===e&&activeCell===o?currentEditor.loadValue(n):(applyFormatResultToCellNode(n?getFormatter(e,t)(e,o,getDataItemValueForColumn(n,t),t,n,self):"",l),invalidatePostProcessingResults(e)))}function updateRow(e){var o=rowsCache[e];if(o){ensureCellNodesInRowsCache(e);var t,n,l,r=getDataItem(e);for(t in o.cellNodesByColumnIdx)o.cellNodesByColumnIdx.hasOwnProperty(t)&&(n=columns[t|=0],l=o.cellNodesByColumnIdx[t][0],e===activeRow&&t===activeCell&&currentEditor?currentEditor.loadValue(r):r?applyFormatResultToCellNode(getFormatter(e,n)(e,t,getDataItemValueForColumn(r,n),n,r,self),l):l.innerHTML="");invalidatePostProcessingResults(e)}}function getViewportHeight(){var e,o;options.autoHeight&&-1==options.frozenColumn||(topPanelH=options.showTopPanel?options.topPanelHeight+getVBoxDelta($topPanelScroller):0,headerRowH=options.showHeaderRow?options.headerRowHeight+getVBoxDelta($headerRowScroller):0,footerRowH=options.showFooterRow?options.footerRowHeight+getVBoxDelta($footerRowScroller):0),viewportH=options.autoHeight?(e=$paneHeaderL.outerHeight(),e=(e=(e+=options.showHeaderRow?options.headerRowHeight+getVBoxDelta($headerRowScroller):0)+(options.showFooterRow?options.footerRowHeight+getVBoxDelta($footerRowScroller):0))+(getCanvasWidth()>viewportW?scrollbarDimensions.height:0),options.rowHeight*getDataLengthIncludingAddNew()+(-1==options.frozenColumn?e:0)):(e=options.showColumnHeader?parseFloat($.css($headerScroller[0],"height"))+getVBoxDelta($headerScroller):0,o=options.createPreHeaderPanel&&options.showPreHeaderPanel?options.preHeaderPanelHeight+getVBoxDelta($preHeaderPanelScroller):0,parseFloat($.css($container[0],"height",!0))-parseFloat($.css($container[0],"paddingTop",!0))-parseFloat($.css($container[0],"paddingBottom",!0))-e-topPanelH-headerRowH-footerRowH-o),numVisibleRows=Math.ceil(viewportH/options.rowHeight)}function getViewportWidth(){viewportW=parseFloat($container.width())}function resizeCanvas(){var e;initialized&&(viewportBottomH=viewportTopH=paneBottomH=paneTopH=0,getViewportWidth(),getViewportHeight(),hasFrozenRows?paneBottomH=options.frozenBottom?(paneTopH=viewportH-frozenRowsHeight-scrollbarDimensions.height,frozenRowsHeight+scrollbarDimensions.height):viewportH-(paneTopH=frozenRowsHeight):paneTopH=viewportH,paneTopH+=topPanelH+headerRowH+footerRowH,hasFrozenColumns()&&options.autoHeight&&(paneTopH+=scrollbarDimensions.height),viewportTopH=paneTopH-topPanelH-headerRowH-footerRowH,options.autoHeight&&(hasFrozenColumns()&&$container.height(paneTopH+parseFloat($.css($headerScrollerL[0],"height"))),$paneTopL.css("position","relative")),$paneTopL.css({top:$paneHeaderL.height()||(options.showHeaderRow?options.headerRowHeight:0)+(options.showPreHeaderPanel?options.preHeaderPanelHeight:0),height:paneTopH}),e=$paneTopL.position().top+paneTopH,options.autoHeight||$viewportTopL.height(viewportTopH),hasFrozenColumns()?($paneTopR.css({top:$paneHeaderL.height(),height:paneTopH}),$viewportTopR.height(viewportTopH),hasFrozenRows&&($paneBottomL.css({top:e,height:paneBottomH}),$paneBottomR.css({top:e,height:paneBottomH}),$viewportBottomR.height(paneBottomH))):hasFrozenRows&&($paneBottomL.css({width:"100%",height:paneBottomH}),$paneBottomL.css("top",e)),hasFrozenRows?($viewportBottomL.height(paneBottomH),options.frozenBottom?($canvasBottomL.height(frozenRowsHeight),hasFrozenColumns()&&$canvasBottomR.height(frozenRowsHeight)):($canvasTopL.height(frozenRowsHeight),hasFrozenColumns()&&$canvasTopR.height(frozenRowsHeight))):$viewportTopR.height(viewportTopH),scrollbarDimensions&&scrollbarDimensions.width||(scrollbarDimensions=measureScrollbar()),options.autosizeColsMode===Slick.GridAutosizeColsMode.LegacyForceFit&&autosizeColumns(),updateRowCount(),handleScroll(),lastRenderedScrollLeft=-1,render())}function updatePagingStatusFromView(e){pagingActive=0!==e.pageSize,pagingIsLastPage=e.pageNum==e.totalPages-1}function updateRowCount(){if(initialized){var e,o=getDataLength(),t=getDataLengthIncludingAddNew(),l=0,t=((hasFrozenRows&&!options.frozenBottom?$canvasBottomL:$canvasTopL).height(),l=hasFrozenRows?getDataLength()-options.frozenRow:t+(options.leaveSpaceForNewRows?numVisibleRows-1:0),$viewportScrollContainerY.height()),r=viewportHasVScroll,i=(viewportHasVScroll=options.alwaysShowVerticalScroll||!options.autoHeight&&l*options.rowHeight>t,makeActiveCellNormal(),o-1);for(e in rowsCache)i<e&&removeRowFromCache(e);options.enableAsyncPostRenderCleanup&&startPostProcessingCleanup(),activeCellNode&&i<activeRow&&resetActiveCell();o=h,l=(options.autoHeight?h=options.rowHeight*l:(th=Math.max(options.rowHeight*l,t-scrollbarDimensions.height),cj=th<maxSupportedCssHeight?(h=ph=th,n=1,0):(ph=(h=maxSupportedCssHeight)/100,n=Math.floor(th/ph),(th-h)/(n-1))),h!==o&&(hasFrozenRows&&!options.frozenBottom?($canvasBottomL.css("height",h),hasFrozenColumns()&&$canvasBottomR.css("height",h)):($canvasTopL.css("height",h),$canvasTopR.css("height",h)),scrollTop=$viewportScrollContainerY[0].scrollTop),scrollTop+offset<=th-t);console.log("updateRowCount - diff: "+(th-t-(scrollTop+offset))),0==th||0==scrollTop?page=offset=0:scrollTo(l?scrollTop+offset:th-t+scrollbarDimensions.height),h!=o&&options.autoHeight&&resizeCanvas(),options.autosizeColsMode===Slick.GridAutosizeColsMode.LegacyForceFit&&r!=viewportHasVScroll&&autosizeColumns(),updateCanvasWidth(!1)}}function getVisibleRange(e,o){return null==o&&(o=scrollLeft),{top:getRowFromPosition(e=null==e?scrollTop:e),bottom:getRowFromPosition(e+viewportH)+1,leftPx:o,rightPx:o+viewportW}}function getRenderedRange(e,o){var e=getVisibleRange(e,o),o=Math.round(viewportH/options.rowHeight),t=options.minRowBuffer;return-1==vScrollDir?(e.top-=o,e.bottom+=t):1==vScrollDir?(e.top-=t,e.bottom+=o):(e.top-=t,e.bottom+=t),e.top=Math.max(0,e.top),e.bottom=Math.min(getDataLengthIncludingAddNew()-1,e.bottom),e.leftPx-=viewportW,e.rightPx+=viewportW,e.leftPx=Math.max(0,e.leftPx),e.rightPx=Math.min(canvasWidth,e.rightPx),e}function ensureCellNodesInRowsCache(e){var o=rowsCache[e];if(o&&o.cellRenderQueue.length)for(var t=o.rowNode.children().last();o.cellRenderQueue.length;){var n=o.cellRenderQueue.pop();0===(t=(o.cellNodesByColumnIdx[n]=t).prev()).length&&(t=$(o.rowNode[0]).children().last())}}function cleanUpCells(e,o){if(!hasFrozenRows||!(options.frozenBottom&&actualFrozenRow<o||o<=actualFrozenRow)){var t,n,l,r,i=rowsCache[o],s=[];for(t in i.cellNodesByColumnIdx)!i.cellNodesByColumnIdx.hasOwnProperty(t)||(t|=0)<=options.frozenColumn||Array.isArray(columns)&&columns[t]&&columns[t].alwaysRenderColumn||(n=i.cellColSpans[t],!(columnPosLeft[t]>e.rightPx||columnPosRight[Math.min(columns.length-1,t+n-1)]<e.leftPx)||o==activeRow&&t==activeCell||s.push(t));for(;null!=(l=s.pop());)r=i.cellNodesByColumnIdx[l][0],options.enableAsyncPostRenderCleanup&&postProcessedRows[o]&&postProcessedRows[o][l]?queuePostProcessedCellForCleanup(r,l,o):r.parentElement.removeChild(r),delete i.cellColSpans[l],delete i.cellNodesByColumnIdx[l],postProcessedRows[o]&&delete postProcessedRows[o][l],0}}function cleanUpAndRenderCells(e){for(var o=[],t=[],n=e.top,l=e.bottom;n<=l;n++)if(f=rowsCache[n]){ensureCellNodesInRowsCache(n),cleanUpCells(e,n);for(var r,i,s=0,a=(a=data.getItemMetadata&&data.getItemMetadata(n))&&a.columns,d=getDataItem(n),c=0,u=columns.length;c<u&&!(columnPosLeft[c]>e.rightPx);c++)null==(i=f.cellColSpans[c])&&(i=1,a&&"*"===(i=(r=a[columns[c].id]||a[c])&&r.colspan||1)&&(i=u-c),columnPosRight[Math.min(u-1,c+i-1)]>e.leftPx&&(appendCellHtml(o,n,c,i,d),s++)),c+=1<i?i-1:0;s&&t.push(n)}if(o.length){var h,p,w=document.createElement("div");for(w.innerHTML=sanitizeHtmlString(o.join(""));null!=(h=t.pop());)for(var m,f=rowsCache[h];null!=(m=f.cellRenderQueue.pop());)p=w.lastChild,(hasFrozenColumns()&&m>options.frozenColumn?f.rowNode[1]:f.rowNode[0]).appendChild(p),f.cellNodesByColumnIdx[m]=$(p)}}function renderRows(e){for(var o=[],t=[],n=[],l=!1,r=getDataLength(),i=e.top,s=e.bottom;i<=s;i++)rowsCache[i]||hasFrozenRows&&options.frozenBottom&&i==getDataLength()||(renderedRows++,n.push(i),rowsCache[i]={rowNode:null,cellColSpans:[],cellNodesByColumnIdx:[],cellRenderQueue:[]},appendRowHtml(o,t,i,e,r),activeCellNode&&activeRow===i&&(l=!0),counter_rows_rendered++);if(n.length){var a=document.createElement("div"),d=document.createElement("div");a.innerHTML=sanitizeHtmlString(o.join("")),d.innerHTML=sanitizeHtmlString(t.join(""));for(i=0,s=n.length;i<s;i++)hasFrozenRows&&n[i]>=actualFrozenRow?hasFrozenColumns()?(rowsCache[n[i]].rowNode=$().add($(a.firstChild)).add($(d.firstChild)),$canvasBottomL[0].appendChild(a.firstChild),$canvasBottomR[0].appendChild(d.firstChild)):(rowsCache[n[i]].rowNode=$().add($(a.firstChild)),$canvasBottomL[0].appendChild(a.firstChild)):hasFrozenColumns()?(rowsCache[n[i]].rowNode=$().add($(a.firstChild)).add($(d.firstChild)),$canvasTopL[0].appendChild(a.firstChild),$canvasTopR[0].appendChild(d.firstChild)):(rowsCache[n[i]].rowNode=$().add($(a.firstChild)),$canvasTopL[0].appendChild(a.firstChild));l&&(activeCellNode=getCellNode(activeRow,activeCell))}}function startPostProcessing(){options.enableAsyncPostRender&&(clearTimeout(h_postrender),h_postrender=setTimeout(asyncPostProcessRows,options.asyncPostRenderDelay))}function startPostProcessingCleanup(){options.enableAsyncPostRenderCleanup&&(clearTimeout(h_postrenderCleanup),h_postrenderCleanup=setTimeout(asyncPostProcessCleanupRows,options.asyncPostRenderCleanupDelay))}function invalidatePostProcessingResults(e){for(var o in postProcessedRows[e])postProcessedRows[e].hasOwnProperty(o)&&(postProcessedRows[e][o]="C");postProcessFromRow=Math.min(postProcessFromRow,e),postProcessToRow=Math.max(postProcessToRow,e),startPostProcessing()}function updateRowPositions(){var e,o=!0;for(e in rowsCache){var t=e?parseInt(e):0;o&&console.log("updateRowPositions - old: "+rowsCache[t].rowNode[0].style.top+", new: "+getRowTop(t)),rowsCache[t].rowNode[0].style.top=getRowTop(t)+"px",o=!1}}function render(){var e,o,t;initialized&&(scrollThrottle.dequeue(),e=getVisibleRange(),cleanupRows(o=getRenderedRange()),lastRenderedScrollLeft!=scrollLeft&&(hasFrozenRows&&(t=jQuery.extend(!0,{},o),options.frozenBottom?(t.top=actualFrozenRow,t.bottom=getDataLength()):(t.top=0,t.bottom=options.frozenRow),cleanUpAndRenderCells(t)),cleanUpAndRenderCells(o)),renderRows(o),hasFrozenRows&&(options.frozenBottom?renderRows({top:actualFrozenRow,bottom:getDataLength()-1,leftPx:o.leftPx,rightPx:o.rightPx}):renderRows({top:0,bottom:options.frozenRow-1,leftPx:o.leftPx,rightPx:o.rightPx})),postProcessFromRow=e.top,postProcessToRow=Math.min(getDataLengthIncludingAddNew()-1,e.bottom),startPostProcessing(),lastRenderedScrollTop=scrollTop,lastRenderedScrollLeft=scrollLeft,h_render=null,trigger(self.onRendered,{startRow:e.top,endRow:e.bottom,grid:self}))}function handleHeaderScroll(){handleElementScroll($headerScrollContainer[0])}function handleHeaderRowScroll(){var e=$headerRowScrollContainer[0].scrollLeft;e!=$viewportScrollContainerX[0].scrollLeft&&($viewportScrollContainerX[0].scrollLeft=e)}function handleFooterRowScroll(){var e=$footerRowScrollContainer[0].scrollLeft;e!=$viewportScrollContainerX[0].scrollLeft&&($viewportScrollContainerX[0].scrollLeft=e)}function handlePreHeaderPanelScroll(){handleElementScroll($preHeaderPanelScroller[0])}function handleElementScroll(e){e=e.scrollLeft;e!=$viewportScrollContainerX[0].scrollLeft&&($viewportScrollContainerX[0].scrollLeft=e)}function handleScroll(){return scrollTop=$viewportScrollContainerY[0].scrollTop,scrollLeft=$viewportScrollContainerX[0].scrollLeft,_handleScroll(!1)}function _handleScroll(e){var o,t=$viewportScrollContainerY[0].scrollHeight-$viewportScrollContainerY[0].clientHeight,l=$viewportScrollContainerY[0].scrollWidth-$viewportScrollContainerY[0].clientWidth,t=Math.max(0,t),l=Math.max(0,l),t=(t<scrollTop&&(scrollTop=t),l<scrollLeft&&(scrollLeft=l),Math.abs(scrollTop-prevScrollTop)),l=Math.abs(scrollLeft-prevScrollLeft);return l&&(prevScrollLeft=scrollLeft,$viewportScrollContainerX[0].scrollLeft=scrollLeft,$headerScrollContainer[0].scrollLeft=scrollLeft,$topPanelScroller[0].scrollLeft=scrollLeft,$headerRowScrollContainer[0].scrollLeft=scrollLeft,options.createFooterRow&&($footerRowScrollContainer[0].scrollLeft=scrollLeft),options.createPreHeaderPanel&&(hasFrozenColumns()?$preHeaderPanelScrollerR[0].scrollLeft=scrollLeft:$preHeaderPanelScroller[0].scrollLeft=scrollLeft),hasFrozenColumns()?hasFrozenRows&&($viewportTopR[0].scrollLeft=scrollLeft):hasFrozenRows&&($viewportTopL[0].scrollLeft=scrollLeft)),t&&(vScrollDir=prevScrollTop<scrollTop?1:-1,prevScrollTop=scrollTop,e&&($viewportScrollContainerY[0].scrollTop=scrollTop),hasFrozenColumns()&&(hasFrozenRows&&!options.frozenBottom?$viewportBottomL[0].scrollTop=scrollTop:$viewportTopL[0].scrollTop=scrollTop),t<viewportH?scrollTo(scrollTop+offset):(e=offset,page=h==viewportH?0:Math.min(n-1,Math.floor(scrollTop*((th-viewportH)/(h-viewportH))*(1/ph))),e!=(offset=Math.round(page*cj))&&invalidateAllRows())),(l||t)&&(e=Math.abs(lastRenderedScrollLeft-scrollLeft),o=Math.abs(lastRenderedScrollTop-scrollTop),(20<e||20<o)&&(options.forceSyncScrolling||o<viewportH&&e<viewportW?render():scrollThrottle.enqueue(),trigger(self.onViewportChanged,{}))),trigger(self.onScroll,{scrollLeft:scrollLeft,scrollTop:scrollTop}),!(!l&&!t)}function ActionThrottle(e,o){var t=!1,n=!1;function l(){n=!1}function r(){t=!0,setTimeout(i,o),e()}function i(){n?(l(),r()):t=!1}return{enqueue:function(){t?n=!0:r()},dequeue:l}}function asyncPostProcessRows(){for(var e=getDataLength();postProcessFromRow<=postProcessToRow;){var o,t,n,l=0<=vScrollDir?postProcessFromRow++:postProcessToRow--,r=rowsCache[l];if(r&&!(e<=l)){for(var i in postProcessedRows[l]||(postProcessedRows[l]={}),ensureCellNodesInRowsCache(l),r.cellNodesByColumnIdx)r.cellNodesByColumnIdx.hasOwnProperty(i)&&(o=columns[i|=0],t=postProcessedRows[l][i],o.asyncPostRender&&"R"!==t&&((n=r.cellNodesByColumnIdx[i])&&o.asyncPostRender(n,l,getDataItem(l),o,"C"===t),postProcessedRows[l][i]="R"));return void(h_postrender=setTimeout(asyncPostProcessRows,options.asyncPostRenderDelay))}}}function asyncPostProcessCleanupRows(){if(0<postProcessedCleanupQueue.length){for(var e=postProcessedCleanupQueue[0].groupId;0<postProcessedCleanupQueue.length&&postProcessedCleanupQueue[0].groupId==e;){var o,t=postProcessedCleanupQueue.shift();"R"==t.actionType&&$(t.node).remove(),"C"!=t.actionType||(o=columns[t.columnIdx]).asyncPostRenderCleanup&&t.node&&o.asyncPostRenderCleanup(t.node,t.rowIdx,o)}h_postrenderCleanup=setTimeout(asyncPostProcessCleanupRows,options.asyncPostRenderCleanupDelay)}}function updateCellCssStylesOnRenderedRows(e,o){var t,n,l,r,i;for(i in rowsCache){if(r=o&&o[i],l=e&&e[i],r)for(n in r)l&&r[n]==l[n]||(t=getCellNode(i,getColumnIndex(n)))&&$(t).removeClass(r[n]);if(l)for(n in l)r&&r[n]==l[n]||(t=getCellNode(i,getColumnIndex(n)))&&$(t).addClass(l[n])}}function addCellCssStyles(e,o){if(cellCssClasses[e])throw new Error("SlickGrid addCellCssStyles: cell CSS hash with key '"+e+"' already exists.");updateCellCssStylesOnRenderedRows(cellCssClasses[e]=o,null),trigger(self.onCellCssStylesChanged,{key:e,hash:o,grid:self})}function removeCellCssStyles(e){cellCssClasses[e]&&(updateCellCssStylesOnRenderedRows(null,cellCssClasses[e]),delete cellCssClasses[e],trigger(self.onCellCssStylesChanged,{key:e,hash:null,grid:self}))}function setCellCssStyles(e,o){var t=cellCssClasses[e];updateCellCssStylesOnRenderedRows(cellCssClasses[e]=o,t),trigger(self.onCellCssStylesChanged,{key:e,hash:o,grid:self})}function getCellCssStyles(e){return cellCssClasses[e]}function flashCell(e,o,n){n=n||100,rowsCache[e]&&function e(o,t){t&&setTimeout(function(){o.queue(function(){o.toggleClass(options.cellFlashingCssClass).dequeue(),e(o,t-1)})},n)}($(getCellNode(e,o)),4)}function handleMouseWheel(e,o,t,n){scrollTop=Math.max(0,$viewportScrollContainerY[0].scrollTop-n*options.rowHeight),scrollLeft=$viewportScrollContainerX[0].scrollLeft+10*t,_handleScroll(!0)&&e.preventDefault()}function handleDragInit(e,o){var t=getCellFromEvent(e);return!(!t||!cellExists(t.row,t.cell))&&(t=trigger(self.onDragInit,o,e),!!e.isImmediatePropagationStopped()&&t)}function handleDragStart(e,o){var t=getCellFromEvent(e);return!(!t||!cellExists(t.row,t.cell))&&(t=trigger(self.onDragStart,o,e),!!e.isImmediatePropagationStopped()&&t)}function handleDrag(e,o){return trigger(self.onDrag,o,e)}function handleDragEnd(e,o){trigger(self.onDragEnd,o,e)}function handleKeyDown(e){trigger(self.onKeyDown,{row:activeRow,cell:activeCell},e);var o=e.isImmediatePropagationStopped(),t=Slick.keyCode;if(!o&&!e.shiftKey&&!e.altKey){if(options.editable&&currentEditor&&currentEditor.keyCaptureList&&-1<currentEditor.keyCaptureList.indexOf(e.which))return;e.which==t.HOME?o=(e.ctrlKey?navigateTop:navigateRowStart)():e.which==t.END&&(o=(e.ctrlKey?navigateBottom:navigateRowEnd)())}if(!o)if(e.shiftKey||e.altKey||e.ctrlKey)e.which!=t.TAB||!e.shiftKey||e.ctrlKey||e.altKey||(o=navigatePrev());else{if(options.editable&&currentEditor&&currentEditor.keyCaptureList&&-1<currentEditor.keyCaptureList.indexOf(e.which))return;if(e.which==t.ESCAPE){if(!getEditorLock().isActive())return;cancelEditAndSetFocus()}else e.which==t.PAGE_DOWN?(navigatePageDown(),o=!0):e.which==t.PAGE_UP?(navigatePageUp(),o=!0):e.which==t.LEFT?o=navigateLeft():e.which==t.RIGHT?o=navigateRight():e.which==t.UP?o=navigateUp():e.which==t.DOWN?o=navigateDown():e.which==t.TAB?o=navigateNext():e.which==t.ENTER&&(options.editable&&(currentEditor?(activeRow===getDataLength()?navigateDown:commitEditAndSetFocus)():getEditorLock().commitCurrentEdit()&&makeActiveCellEditable(void 0,void 0,e)),o=!0)}if(o){e.stopPropagation(),e.preventDefault();try{e.originalEvent.keyCode=0}catch(e){}}}function handleClick(e){currentEditor||e.target==document.activeElement&&!$(e.target).hasClass("slick-cell")||(n=getTextSelection(),setFocus(),setTextSelection(n));var o,t,n=getCellFromEvent(e);!n||null!==currentEditor&&activeRow==n.row&&activeCell==n.cell||(trigger(self.onClick,{row:n.row,cell:n.cell},e),e.isImmediatePropagationStopped()||!canCellBeActive(n.row,n.cell)||getEditorLock().isActive()&&!getEditorLock().commitCurrentEdit()||(scrollRowIntoView(n.row,!1),o=e.target&&e.target.className===Slick.preClickClassName,t=columns[n.cell],t=!!(options.editable&&t&&t.editor&&options.suppressActiveCellChangeOnEdit),setActiveCellInternal(getCellNode(n.row,n.cell),null,o,t,e)))}function handleContextMenu(e){var o=$(e.target).closest(".slick-cell",$canvas);0===o.length||activeCellNode===o[0]&&null!==currentEditor||trigger(self.onContextMenu,{},e)}function handleDblClick(e){var o=getCellFromEvent(e);!o||null!==currentEditor&&activeRow==o.row&&activeCell==o.cell||(trigger(self.onDblClick,{row:o.row,cell:o.cell},e),e.isImmediatePropagationStopped()||options.editable&&gotoCell(o.row,o.cell,!0,e))}function handleHeaderMouseEnter(e){trigger(self.onHeaderMouseEnter,{column:$(this).data("column"),grid:self},e)}function handleHeaderMouseLeave(e){trigger(self.onHeaderMouseLeave,{column:$(this).data("column"),grid:self},e)}function handleHeaderRowMouseEnter(e){trigger(self.onHeaderRowMouseEnter,{column:$(this).data("column"),grid:self},e)}function handleHeaderRowMouseLeave(e){trigger(self.onHeaderRowMouseLeave,{column:$(this).data("column"),grid:self},e)}function handleHeaderContextMenu(e){var o=$(e.target).closest(".slick-header-column",".slick-header-columns"),o=o&&o.data("column");trigger(self.onHeaderContextMenu,{column:o},e)}function handleHeaderClick(e){var o;columnResizeDragging||(o=(o=$(e.target).closest(".slick-header-column",".slick-header-columns"))&&o.data("column"))&&trigger(self.onHeaderClick,{column:o},e)}function handleFooterContextMenu(e){var o=$(e.target).closest(".slick-footerrow-column",".slick-footerrow-columns"),o=o&&o.data("column");trigger(self.onFooterContextMenu,{column:o},e)}function handleFooterClick(e){var o=$(e.target).closest(".slick-footerrow-column",".slick-footerrow-columns"),o=o&&o.data("column");trigger(self.onFooterClick,{column:o},e)}function handleMouseEnter(e){trigger(self.onMouseEnter,{},e)}function handleMouseLeave(e){trigger(self.onMouseLeave,{},e)}function cellExists(e,o){return!(e<0||e>=getDataLength()||o<0||o>=columns.length)}function getCellFromPoint(e,o){for(var o=getRowFromPosition(o),t=0,n=0,l=0;l<columns.length&&n<e;l++)n+=columns[l].width,t++;return{row:o,cell:(t=t<0?0:t)-1}}function getCellFromNode(e){var o=/l\d+/.exec(e.className);if(o)return parseInt(o[0].substr(1,o[0].length-1),10);throw new Error("SlickGrid getCellFromNode: cannot get cell - "+e.className)}function getRowFromNode(e){for(var o in rowsCache)for(var t in rowsCache[o].rowNode)if(rowsCache[o].rowNode[t]===e)return o?parseInt(o):0;return null}function getFrozenRowOffset(e){return hasFrozenRows?options.frozenBottom?actualFrozenRow<=e?h<viewportTopH?actualFrozenRow*options.rowHeight:h:0:actualFrozenRow<=e?frozenRowsHeight:0:0}function getCellFromEvent(e){var o,t,n,l=$(e.target).closest(".slick-cell",$canvas);return!l.length||(o=getRowFromNode(l[0].parentNode),hasFrozenRows&&(t=l.parents(".grid-canvas").offset(),n=0,l.parents(".grid-canvas-bottom").length&&(n=options.frozenBottom?$canvasTopL.height():frozenRowsHeight),o=getCellFromPoint(e.clientX-t.left,e.clientY-t.top+n+$(document).scrollTop()).row),e=getCellFromNode(l[0]),null==o||null==e)?null:{row:o,cell:e}}function getCellNodeBox(e,o){if(!cellExists(e,o))return null;for(var t=getFrozenRowOffset(e),e=getRowTop(e)-t,t=e+options.rowHeight-1,n=0,l=0;l<o;l++)n+=columns[l].width,options.frozenColumn==l&&(n=0);return{top:e,left:n,bottom:t,right:n+columns[o].width}}function resetActiveCell(){setActiveCellInternal(null,!1)}function setFocus(){(-1==tabbingDirection?$focusSink:$focusSink2)[0].focus()}function scrollCellIntoView(e,o,t){scrollRowIntoView(e,t),o<=options.frozenColumn||(t=getColspan(e,o),internalScrollColumnIntoView(columnPosLeft[o],columnPosRight[o+(1<t?t-1:0)]))}function internalScrollColumnIntoView(e,o){var t=scrollLeft+$viewportScrollContainerX.width()-(viewportHasVScroll?scrollbarDimensions.width:0);e<scrollLeft?($viewportScrollContainerX.scrollLeft(e),handleScroll(),render()):t<o&&($viewportScrollContainerX.scrollLeft(Math.min(e,o-$viewportScrollContainerX[0].clientWidth)),handleScroll(),render())}function scrollColumnIntoView(e){internalScrollColumnIntoView(columnPosLeft[e],columnPosRight[e])}function setActiveCellInternal(e,o,t,n,l){null!==activeCellNode&&(makeActiveCellNormal(),$(activeCellNode).removeClass("active"),rowsCache[activeRow]&&rowsCache[activeRow].rowNode.removeClass("active"));var r,i,s;null!=(activeCellNode=e)?(r=(e=$(activeCellNode)).offset(),i=Math.floor(e.parents(".grid-canvas").offset().top),s=e.parents(".grid-canvas-bottom").length,hasFrozenRows&&s&&(i-=options.frozenBottom?$canvasTopL.height():frozenRowsHeight),s=getCellFromPoint(r.left,Math.ceil(r.top)-i),activeRow=s.row,activeCell=activePosX=activeCell=activePosX=getCellFromNode(activeCellNode),null==o&&(o=activeRow==getDataLength()||options.autoEdit),options.showCellSelection&&(e.addClass("active"),rowsCache[activeRow]&&rowsCache[activeRow].rowNode.addClass("active")),options.editable&&o&&isCellPotentiallyEditable(activeRow,activeCell)&&(clearTimeout(h_editorLoader),options.asyncEditorLoading?h_editorLoader=setTimeout(function(){makeActiveCellEditable(void 0,t,l)},options.asyncEditorLoadDelay):makeActiveCellEditable(void 0,t,l))):activeRow=activeCell=null,n||trigger(self.onActiveCellChanged,getActiveCell())}function clearTextSelection(){var e;if(document.selection&&document.selection.empty)try{document.selection.empty()}catch(e){}else!window.getSelection||(e=window.getSelection())&&e.removeAllRanges&&e.removeAllRanges()}function isCellPotentiallyEditable(e,o){var t=getDataLength();return(!(e<t)||getDataItem(e))&&(!(columns[o].cannotTriggerInsert&&t<=e)&&!!getEditor(e,o))}function makeActiveCellNormal(){var e,o;currentEditor&&(trigger(self.onBeforeCellEditorDestroy,{editor:currentEditor}),currentEditor.destroy(),currentEditor=null,activeCellNode&&(e=getDataItem(activeRow),$(activeCellNode).removeClass("editable invalid"),e&&(o=columns[activeCell],applyFormatResultToCellNode(getFormatter(activeRow,o)(activeRow,activeCell,getDataItemValueForColumn(e,o),o,e,self),activeCellNode),invalidatePostProcessingResults(activeRow))),navigator.userAgent.toLowerCase().match(/msie/)&&clearTextSelection(),getEditorLock().deactivate(editController))}function makeActiveCellEditable(e,o,t){if(activeCellNode){if(!options.editable)throw new Error("SlickGrid makeActiveCellEditable : should never get called when options.editable is false");var n,l,r;clearTimeout(h_editorLoader),isCellPotentiallyEditable(activeRow,activeCell)&&(n=columns[activeCell],l=getDataItem(activeRow),!1===trigger(self.onBeforeEditCell,{row:activeRow,cell:activeCell,item:l,column:n,target:"grid"})?setFocus():(getEditorLock().activate(editController),$(activeCellNode).addClass("editable"),r=e||getEditor(activeRow,activeCell),e||r.suppressClearOnEdit||(activeCellNode.innerHTML=""),e=(e=(e=data.getItemMetadata&&data.getItemMetadata(activeRow))&&e.columns)&&(e[n.id]||e[activeCell]),currentEditor=new r({grid:self,gridPosition:absBox($container[0]),position:absBox(activeCellNode),container:activeCellNode,column:n,columnMetaData:e,item:l||{},event:t,commitChanges:commitEditAndSetFocus,cancelChanges:cancelEditAndSetFocus}),l&&(currentEditor.loadValue(l),o&&currentEditor.preClick&&currentEditor.preClick()),serializedEditorValue=currentEditor.serializeValue(),currentEditor.position&&handleActiveCellPositionChange()))}}function commitEditAndSetFocus(){getEditorLock().commitCurrentEdit()&&(setFocus(),options.autoEdit&&navigateDown())}function cancelEditAndSetFocus(){getEditorLock().cancelCurrentEdit()&&setFocus()}function absBox(e){for(var o={top:e.offsetTop,left:e.offsetLeft,bottom:0,right:0,width:$(e).outerWidth(),height:$(e).outerHeight(),visible:!0},t=(o.bottom=o.top+o.height,o.right=o.left+o.width,e.offsetParent);(e=e.parentNode)!=document.body&&null!=e;)o.visible&&e.scrollHeight!=e.offsetHeight&&"visible"!=$(e).css("overflowY")&&(o.visible=o.bottom>e.scrollTop&&o.top<e.scrollTop+e.clientHeight),o.visible&&e.scrollWidth!=e.offsetWidth&&"visible"!=$(e).css("overflowX")&&(o.visible=o.right>e.scrollLeft&&o.left<e.scrollLeft+e.clientWidth),o.left-=e.scrollLeft,o.top-=e.scrollTop,e===t&&(o.left+=e.offsetLeft,o.top+=e.offsetTop,t=e.offsetParent),o.bottom=o.top+o.height,o.right=o.left+o.width;return o}function getActiveCellPosition(){return absBox(activeCellNode)}function getGridPosition(){return absBox($container[0])}function handleActiveCellPositionChange(){var e;activeCellNode&&(trigger(self.onActiveCellPositionChanged,{}),currentEditor&&(e=getActiveCellPosition(),currentEditor.show&&currentEditor.hide&&(e.visible?currentEditor.show():currentEditor.hide()),currentEditor.position&&currentEditor.position(e)))}function getCellEditor(){return currentEditor}function getActiveCell(){return activeCellNode?{row:activeRow,cell:activeCell}:null}function getActiveCellNode(){return activeCellNode}function getTextSelection(){var e,o=null;return o=window.getSelection&&0<(e=window.getSelection()).rangeCount?e.getRangeAt(0):o}function setTextSelection(e){var o;window.getSelection&&e&&((o=window.getSelection()).removeAllRanges(),o.addRange(e))}function scrollRowIntoView(e,o){var t,n,l;(!hasFrozenRows||!options.frozenBottom&&actualFrozenRow-1<e||options.frozenBottom&&e<actualFrozenRow-1)&&(t=$viewportScrollContainerY.height(),n=(e=hasFrozenRows&&!options.frozenBottom?e-options.frozenRow:e)*options.rowHeight,l=(e+1)*options.rowHeight-t+(viewportHasHScroll?scrollbarDimensions.height:0),(e+1)*options.rowHeight>scrollTop+t+offset?(scrollTo(o?n:l),render()):e*options.rowHeight<scrollTop+offset&&(scrollTo(o?l:n),render()))}function scrollRowToTop(e){scrollTo(e*options.rowHeight),render()}function scrollPage(e){e*=numVisibleRows;if(scrollTo((getRowFromPosition(scrollTop+options.rowHeight-1)+e)*options.rowHeight),render(),options.enableCellNavigation&&null!=activeRow){for(var o=activeRow+e,e=getDataLengthIncludingAddNew(),t=((o=e<=o?e-1:o)<0&&(o=0),0),n=null,e=activePosX;t<=activePosX;)canCellBeActive(o,t)&&(n=t),t+=getColspan(o,t);null!==n?(setActiveCellInternal(getCellNode(o,n)),activePosX=e):resetActiveCell()}}function navigatePageDown(){scrollPage(1)}function navigatePageUp(){scrollPage(-1)}function navigateTop(){navigateToRow(0)}function navigateBottom(){navigateToRow(getDataLength()-1)}function navigateToRow(e){var o=getDataLength();if(o&&(e<0?e=0:o<=e&&(e=o-1),scrollCellIntoView(e,0,!0),options.enableCellNavigation&&null!=activeRow)){for(var t=0,n=null,o=activePosX;t<=activePosX;)canCellBeActive(e,t)&&(n=t),t+=getColspan(e,t);null!==n?(setActiveCellInternal(getCellNode(e,n)),activePosX=o):resetActiveCell()}}function getColspan(e,o){var e=data.getItemMetadata&&data.getItemMetadata(e);return e&&e.columns?"*"===(e=(e=e.columns[columns[o].id]||e.columns[o])&&e.colspan)?columns.length-o:e||1:1}function findFirstFocusableCell(e){for(var o=0;o<columns.length;){if(canCellBeActive(e,o))return o;o+=getColspan(e,o)}return null}function findLastFocusableCell(e){for(var o=0,t=null;o<columns.length;)canCellBeActive(e,o)&&(t=o),o+=getColspan(e,o);return t}function gotoRight(e,o,t){if(o>=columns.length)return null;for(;(o+=getColspan(e,o))<columns.length&&!canCellBeActive(e,o););return o<columns.length?{row:e,cell:o,posX:o}:null}function gotoLeft(e,o,t){if(o<=0)return null;var n=findFirstFocusableCell(e);if(null===n||o<=n)return null;for(var l,r={row:e,cell:n,posX:n};;){if(!(l=gotoRight(r.row,r.cell,r.posX)))return null;if(l.cell>=o)return r;r=l}}function gotoDown(e,o,t){for(var n,l=getDataLengthIncludingAddNew();;){if(++e>=l)return null;for(n=o=0;o<=t;)o+=getColspan(e,n=o);if(canCellBeActive(e,n))return{row:e,cell:n,posX:t}}}function gotoUp(e,o,t){for(var n;;){if(--e<0)return null;for(n=o=0;o<=t;)o+=getColspan(e,n=o);if(canCellBeActive(e,n))return{row:e,cell:n,posX:t}}}function gotoNext(e,o,t){if(null==e&&null==o&&canCellBeActive(e=o=t=0,o))return{row:e,cell:o,posX:o};o=gotoRight(e,o,t);if(o)return o;var n,l=getDataLengthIncludingAddNew();for(e===l-1&&e--;++e<l;)if(null!==(n=findFirstFocusableCell(e)))return{row:e,cell:n,posX:n};return null}function gotoPrev(e,o,t){if(null==e&&null==o&&canCellBeActive(e=getDataLengthIncludingAddNew()-1,o=t=columns.length-1))return{row:e,cell:o,posX:o};for(var n,l;!n&&!(n=gotoLeft(e,o,t));){if(--e<0)return null;o=0,null!==(l=findLastFocusableCell(e))&&(n={row:e,cell:l,posX:l})}return n}function gotoRowStart(e,o,t){var n=findFirstFocusableCell(e);return null===n?null:{row:e,cell:n,posX:n}}function gotoRowEnd(e,o,t){var n=findLastFocusableCell(e);return null===n?null:{row:e,cell:n,posX:n}}function navigateRight(){return navigate("right")}function navigateLeft(){return navigate("left")}function navigateDown(){return navigate("down")}function navigateUp(){return navigate("up")}function navigateNext(){return navigate("next")}function navigatePrev(){return navigate("prev")}function navigateRowStart(){return navigate("home")}function navigateRowEnd(){return navigate("end")}function navigate(e){if(!options.enableCellNavigation)return!1;if(!activeCellNode&&"prev"!=e&&"next"!=e)return!1;if(!getEditorLock().commitCurrentEdit())return!0;setFocus();tabbingDirection={up:-1,down:1,left:-1,right:1,prev:-1,next:1,home:-1,end:1}[e];var o,e=(0,{up:gotoUp,down:gotoDown,left:gotoLeft,right:gotoRight,prev:gotoPrev,next:gotoNext,home:gotoRowStart,end:gotoRowEnd}[e])(activeRow,activeCell,activePosX);return e?hasFrozenRows&&options.frozenBottom&e.row==getDataLength()?void 0:(o=e.row==getDataLength(),(!options.frozenBottom&&e.row>=actualFrozenRow||options.frozenBottom&&e.row<actualFrozenRow)&&scrollCellIntoView(e.row,e.cell,!o&&options.emulatePagingWhenScrolling),setActiveCellInternal(getCellNode(e.row,e.cell)),activePosX=e.posX,!0):(setActiveCellInternal(getCellNode(activeRow,activeCell)),!1)}function getCellNode(o,t){if(rowsCache[o]){ensureCellNodesInRowsCache(o);try{return rowsCache[o].cellNodesByColumnIdx.length>t?rowsCache[o].cellNodesByColumnIdx[t][0]:null}catch(e){return rowsCache[o].cellNodesByColumnIdx[t]}}return null}function setActiveCell(e,o,t,n,l){!initialized||e>getDataLength()||e<0||o>=columns.length||o<0||options.enableCellNavigation&&(scrollCellIntoView(e,o,!1),setActiveCellInternal(getCellNode(e,o),t,n,l))}function setActiveRow(e,o,t){!initialized||e>getDataLength()||e<0||o>=columns.length||o<0||(activeRow=e,t||scrollCellIntoView(e,o||0,!1))}function canCellBeActive(e,o){return!(!options.enableCellNavigation||e>=getDataLengthIncludingAddNew()||e<0||o>=columns.length||o<0)&&((e=data.getItemMetadata&&data.getItemMetadata(e))&&void 0!==e.focusable?!!e.focusable:(e=e&&e.columns)&&e[columns[o].id]&&void 0!==e[columns[o].id].focusable?!!e[columns[o].id].focusable:e&&e[o]&&void 0!==e[o].focusable?!!e[o].focusable:!!columns[o].focusable)}function canCellBeSelected(e,o){return!(e>=getDataLength()||e<0||o>=columns.length||o<0)&&((e=data.getItemMetadata&&data.getItemMetadata(e))&&void 0!==e.selectable?!!e.selectable:(e=e&&e.columns&&(e.columns[columns[o].id]||e.columns[o]))&&void 0!==e.selectable?!!e.selectable:!!columns[o].selectable)}function gotoCell(e,o,t,n){var l;initialized&&canCellBeActive(e,o)&&getEditorLock().commitCurrentEdit()&&(scrollCellIntoView(e,o,!1),l=getCellNode(e,o),o=columns[o],o=!!(options.editable&&o&&o.editor&&options.suppressActiveCellChangeOnEdit),setActiveCellInternal(l,t||e===getDataLength()||options.autoEdit,null,o,n),currentEditor||setFocus())}function commitCurrentEdit(){var e,o,t=getDataItem(activeRow),n=columns[activeCell];if(currentEditor){if(currentEditor.isValueChanged())return(e=currentEditor.validate()).valid?(activeRow<getDataLength()?(o={row:activeRow,cell:activeCell,editor:currentEditor,serializedValue:currentEditor.serializeValue(),prevSerializedValue:serializedEditorValue,execute:function(){this.editor.applyValue(t,this.serializedValue),updateRow(this.row),trigger(self.onCellChange,{command:"execute",row:this.row,cell:this.cell,item:t,column:n})},undo:function(){this.editor.applyValue(t,this.prevSerializedValue),updateRow(this.row),trigger(self.onCellChange,{command:"undo",row:this.row,cell:this.cell,item:t,column:n})}},options.editCommandHandler?(makeActiveCellNormal(),options.editCommandHandler(t,n,o)):(o.execute(),makeActiveCellNormal())):(currentEditor.applyValue(o={},currentEditor.serializeValue()),makeActiveCellNormal(),trigger(self.onAddNewRow,{item:o,column:n})),!getEditorLock().isActive()):($(activeCellNode).removeClass("invalid"),$(activeCellNode).width(),$(activeCellNode).addClass("invalid"),trigger(self.onValidationError,{editor:currentEditor,cellNode:activeCellNode,validationResults:e,row:activeRow,cell:activeCell,column:n}),currentEditor.focus(),!1);makeActiveCellNormal()}return!0}function cancelCurrentEdit(){return makeActiveCellNormal(),!0}function rowsToRanges(e){for(var o=[],t=columns.length-1,n=0;n<e.length;n++)o.push(new Slick.Range(e[n],0,e[n],t));return o}function getSelectedRows(){if(selectionModel)return selectedRows.slice(0);throw new Error("SlickGrid Selection model is not set")}function setSelectedRows(e,o){if(!selectionModel)throw new Error("SlickGrid Selection model is not set");self&&self.getEditorLock&&!self.getEditorLock().isActive()&&selectionModel.setSelectedRanges(rowsToRanges(e),o||"SlickGrid.setSelectedRows")}function sanitizeHtmlString(e){var o=options.sanitizer||function(e){return e.replace(/(\b)(on\S+)(\s*)=|javascript:([^>]*)[^>]*|(<\s*)(\/*)script([<>]*).*(<\s*)(\/*)script(>*)|(&lt;)(\/*)(script|script defer)(.*)(&gt;|&gt;">)/gi,"")};return"string"==typeof e?o(e):e}this.debug=function(){var e="",e=(e=(e=(e=(e+="\ncounter_rows_rendered:  "+counter_rows_rendered)+("\ncounter_rows_removed:  "+counter_rows_removed)+("\nrenderedRows:  "+renderedRows))+("\nnumVisibleRows:  "+numVisibleRows)+("\nmaxSupportedCssHeight:  "+maxSupportedCssHeight))+("\nn(umber of pages):  "+n)+("\n(current) page:  "+page))+("\npage height (ph):  "+ph)+("\nvScrollDir:  "+vScrollDir);alert(e)},this.eval=function(expr){return eval(expr)},$.extend(this,{slickGridVersion:"2.4.44",onScroll:new Slick.Event,onBeforeSort:new Slick.Event,onSort:new Slick.Event,onHeaderMouseEnter:new Slick.Event,onHeaderMouseLeave:new Slick.Event,onHeaderRowMouseEnter:new Slick.Event,onHeaderRowMouseLeave:new Slick.Event,onHeaderContextMenu:new Slick.Event,onHeaderClick:new Slick.Event,onHeaderCellRendered:new Slick.Event,onBeforeHeaderCellDestroy:new Slick.Event,onHeaderRowCellRendered:new Slick.Event,onFooterRowCellRendered:new Slick.Event,onFooterContextMenu:new Slick.Event,onFooterClick:new Slick.Event,onBeforeHeaderRowCellDestroy:new Slick.Event,onBeforeFooterRowCellDestroy:new Slick.Event,onMouseEnter:new Slick.Event,onMouseLeave:new Slick.Event,onClick:new Slick.Event,onDblClick:new Slick.Event,onContextMenu:new Slick.Event,onKeyDown:new Slick.Event,onAddNewRow:new Slick.Event,onBeforeAppendCell:new Slick.Event,onValidationError:new Slick.Event,onViewportChanged:new Slick.Event,onColumnsReordered:new Slick.Event,onColumnsDrag:new Slick.Event,onColumnsResized:new Slick.Event,onColumnsResizeDblClick:new Slick.Event,onBeforeColumnsResize:new Slick.Event,onCellChange:new Slick.Event,onCompositeEditorChange:new Slick.Event,onBeforeEditCell:new Slick.Event,onBeforeCellEditorDestroy:new Slick.Event,onBeforeDestroy:new Slick.Event,onActiveCellChanged:new Slick.Event,onActiveCellPositionChanged:new Slick.Event,onDragInit:new Slick.Event,onDragStart:new Slick.Event,onDrag:new Slick.Event,onDragEnd:new Slick.Event,onSelectedRowsChanged:new Slick.Event,onCellCssStylesChanged:new Slick.Event,onAutosizeColumns:new Slick.Event,onBeforeSetColumns:new Slick.Event,onRendered:new Slick.Event,onSetOptions:new Slick.Event,registerPlugin:registerPlugin,unregisterPlugin:unregisterPlugin,getPluginByName:getPluginByName,getColumns:getColumns,setColumns:setColumns,getColumnIndex:getColumnIndex,updateColumnHeader:updateColumnHeader,setSortColumn:setSortColumn,setSortColumns:setSortColumns,getSortColumns:getSortColumns,autosizeColumns:autosizeColumns,autosizeColumn:autosizeColumn,getOptions:getOptions,setOptions:setOptions,getData:getData,getDataLength:getDataLength,getDataItem:getDataItem,setData:setData,getSelectionModel:getSelectionModel,setSelectionModel:setSelectionModel,getSelectedRows:getSelectedRows,setSelectedRows:setSelectedRows,getContainerNode:getContainerNode,updatePagingStatusFromView:updatePagingStatusFromView,applyFormatResultToCellNode:applyFormatResultToCellNode,render:render,reRenderColumns:reRenderColumns,invalidate:invalidate,invalidateRow:invalidateRow,invalidateRows:invalidateRows,invalidateAllRows:invalidateAllRows,updateCell:updateCell,updateRow:updateRow,getViewport:getVisibleRange,getRenderedRange:getRenderedRange,resizeCanvas:resizeCanvas,updateRowCount:updateRowCount,scrollRowIntoView:scrollRowIntoView,scrollRowToTop:scrollRowToTop,scrollCellIntoView:scrollCellIntoView,scrollColumnIntoView:scrollColumnIntoView,getCanvasNode:getCanvasNode,getUID:getUID,getHeaderColumnWidthDiff:getHeaderColumnWidthDiff,getScrollbarDimensions:getScrollbarDimensions,getHeadersWidth:getHeadersWidth,getCanvasWidth:getCanvasWidth,getCanvases:getCanvases,getActiveCanvasNode:getActiveCanvasNode,setActiveCanvasNode:setActiveCanvasNode,getViewportNode:getViewportNode,getViewports:getViewports,getActiveViewportNode:getActiveViewportNode,setActiveViewportNode:setActiveViewportNode,focus:setFocus,scrollTo:scrollTo,cacheCssForHiddenInit:cacheCssForHiddenInit,restoreCssFromHiddenInit:restoreCssFromHiddenInit,getCellFromPoint:getCellFromPoint,getCellFromEvent:getCellFromEvent,getActiveCell:getActiveCell,setActiveCell:setActiveCell,setActiveRow:setActiveRow,getActiveCellNode:getActiveCellNode,getActiveCellPosition:getActiveCellPosition,resetActiveCell:resetActiveCell,editActiveCell:makeActiveCellEditable,getCellEditor:getCellEditor,getCellNode:getCellNode,getCellNodeBox:getCellNodeBox,canCellBeSelected:canCellBeSelected,canCellBeActive:canCellBeActive,navigatePrev:navigatePrev,navigateNext:navigateNext,navigateUp:navigateUp,navigateDown:navigateDown,navigateLeft:navigateLeft,navigateRight:navigateRight,navigatePageUp:navigatePageUp,navigatePageDown:navigatePageDown,navigateTop:navigateTop,navigateBottom:navigateBottom,navigateRowStart:navigateRowStart,navigateRowEnd:navigateRowEnd,gotoCell:gotoCell,getTopPanel:getTopPanel,setTopPanelVisibility:setTopPanelVisibility,getPreHeaderPanel:getPreHeaderPanel,getPreHeaderPanelLeft:getPreHeaderPanel,getPreHeaderPanelRight:getPreHeaderPanelRight,setPreHeaderPanelVisibility:setPreHeaderPanelVisibility,getHeader:getHeader,getHeaderColumn:getHeaderColumn,setHeaderRowVisibility:setHeaderRowVisibility,getHeaderRow:getHeaderRow,getHeaderRowColumn:getHeaderRowColumn,setFooterRowVisibility:setFooterRowVisibility,getFooterRow:getFooterRow,getFooterRowColumn:getFooterRowColumn,getGridPosition:getGridPosition,flashCell:flashCell,addCellCssStyles:addCellCssStyles,setCellCssStyles:setCellCssStyles,removeCellCssStyles:removeCellCssStyles,getCellCssStyles:getCellCssStyles,getFrozenRowOffset:getFrozenRowOffset,setColumnHeaderVisibility:setColumnHeaderVisibility,sanitizeHtmlString:sanitizeHtmlString,getDisplayedScrollbarDimensions:getDisplayedScrollbarDimensions,getAbsoluteColumnMinWidth:getAbsoluteColumnMinWidth,init:finishInitialization,destroy:destroy,getEditorLock:getEditorLock,getEditController:getEditController}),init()}$.extend(!0,window,{Slick:{Grid:SlickGrid}})}(jQuery);