slickgrid
Version:
A lightning fast JavaScript grid/spreadsheet
9 lines • 110 kB
JavaScript
/**
* SlickGrid v3.0.2
* (c) 2009-present Michael Leibman
* homepage: http://github.com/mleibman/slickgrid
* license: MIT
* date: 2022-11-14
* file: ./slick.grid.js
*/
if("undefined"==typeof jQuery)throw new Error("SlickGrid requires jquery 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,sanitizer:void 0,logSanitizedHtml:!1},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.Auto,sizeToRemaining:void 0,widthPx:void 0,contentSizePx:0,headerWidthPx: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,slickDraggableInstance=null,slickMouseWheelInstances=[],slickResizableInstances=[],sortableSideLeftInstance,sortableSideRightInstance;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&&!Sortable)throw new Error("SlickGrid requires Sortable.js 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),options.enableMouseWheelScrollHandler&&$viewport.each(function(e,o){slickMouseWheelInstances.push(Slick.MouseWheel({element:o,onMouseWheel: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("mouseenter",".slick-cell",handleMouseEnter).on("mouseleave",".slick-cell",handleMouseLeave),jQuery.fn.drag?$canvas.on("draginit",handleDragInit).on("dragstart",{distance:3},handleDragStart).on("drag",handleDrag).on("dragend",handleDragEnd):Slick.Draggable&&(slickDraggableInstance=Slick.Draggable({containerElement:$container[0],allowDragFrom:"div.slick-cell",onDragInit:handleDragInit,onDragStart:handleDragStart,onDrag:handleDrag,onDragEnd:handleDragEnd})),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[0].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&&0<(e=Math.max(t,e)-t)&&(t+=e,hasFrozenColumns()?canvasWidthR+=e:canvasWidthL+=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||"").attr("data-id",n.id).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 a in n.headerCellAttrs)n.headerCellAttrs.hasOwnProperty(a)&&i.attr(a,n.headerCellAttrs[a]);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(){sortableSideLeftInstance&&(sortableSideLeftInstance.destroy(),sortableSideRightInstance.destroy());var o,a=null;function t(){$viewportScrollContainerX[0].scrollLeft=$viewportScrollContainerX[0].scrollLeft+10}function n(){$viewportScrollContainerX[0].scrollLeft=$viewportScrollContainerX[0].scrollLeft-10}var e={animation:50,direction:"horizontal",chosenClass:"slick-header-column-active",ghostClass:"slick-sortable-placeholder",draggable:".slick-header-column",dragoverBubble:!1,revertClone:!0,onStart:function(e){o=!hasFrozenColumns()||$(e.item).offset().left>$viewportScrollContainerX.offset().left,a=o&&e.originalEvent.pageX>$container[0].clientWidth?a||setInterval(t,100):o&&e.originalEvent.pageX<$viewportScrollContainerX.offset().left?a||setInterval(n,100):(clearInterval(a),null)},onEnd:function(e){var o,t=!1,n=(clearInterval(a),a=null);if(treeColumns.hasDepth()&&(n=(o=columnPositionValidInGroup(e.item)).limit,(t=!o.valid)&&alert(o.message)),!t&&getEditorLock().commitCurrentEdit()){for(var l=(l=sortableSideLeftInstance.toArray()).concat(sortableSideRightInstance.toArray()),r=[],i=0;i<l.length;i++)r.push(columns[getColumnIndex(l[i])]);setColumns(r),trigger(self.onColumnsReordered,{impactedColumns:getImpactedColumns(n)}),e.stopPropagation(),setupColumnResize()}}};sortableSideLeftInstance=Sortable.create($headerL[0],e),sortableSideRightInstance=Sortable.create($headerR[0],e)}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(){if(void 0===Slick.Resizable)throw new Error('Slick.Resizable is undefined, make sure to import "slick.interactions.js"');var d,c,u,h,p,m,t,n,w=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(s,e){var o;s>=columns.length||s<t||options.forceFitColumns&&n<=s||($(e),(o=$("<div class='slick-resizable-handle' />")).appendTo(e).on("dblclick",function(){var e=$(this).parent().attr("id").replace(uid,"");trigger(self.onColumnsResizeDblClick,{triggeredByColumn:e})}),slickResizableInstances.push(Slick.Resizable({resizeableElement:e,resizeableHandleElement:o[0],onResizeStart:function(e,o){e=e.touches?e.touches[0]:e;if(!getEditorLock().commitCurrentEdit())return!1;h=e.pageX,w=0,$(o.resizeableElement).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=s+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<=s;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),m=h+Math.min(t,r),p=h-Math.min(l,n)},onResize:function(e,o){e=e.touches?e.touches[0]:e;columnResizeDragging=!0;var t,n,l,r,e=Math.min(m,Math.max(p,e.pageX))-h,i=0,a=viewportHasVScroll?viewportW-scrollbarDimensions.width:viewportW;if(e<0){for(n=e,d=s;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<=s;c++)u=columns[c],hasFrozenColumns()&&c>options.frozenColumn?u.width:i+=u.width;if(options.forceFitColumns)for(n=-e,d=s+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=s+1;d<columns.length;d++)u=columns[d],hasFrozenColumns()&&d>options.frozenColumn?u.width:i+=u.width;if(options.forceFitColumns)for(n=-e,d=s+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=s;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?(w<l&&r<a-options.frozenRightViewportMinWidth&&(w=l),u.width=r+options.frozenRightViewportMinWidth>a?w:l):u.width=l,n=0));for(c=0;c<=s;c++)u=columns[c],hasFrozenColumns()&&c>options.frozenColumn?u.width:i+=u.width;if(options.forceFitColumns)for(n=-e,d=s+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=s+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:$(o.resizeableElement),resizeHandle:$(o.resizeableHandleElement)})},onResizeEnd:function(e,o){$(o.resizeableElement).removeClass("slick-header-column-active");var t,o=$(o.resizeableElement).attr("id").replace(uid,"");for(!0===trigger(self.onBeforeColumnsResize,{triggeredByColumn:o})&&(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:o}),setTimeout(function(){columnResizeDragging=!1},300)}})))})}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){slickDraggableInstance=destroyAllInstances(slickDraggableInstance),slickMouseWheelInstances=destroyAllInstances(slickMouseWheelInstances),slickResizableInstances=destroyAllInstances(slickResizableInstances),getEditorLock().cancelCurrentEdit(),trigger(self.onBeforeDestroy,{});for(var o=plugins.length;o--;)unregisterPlugin(plugins[o]);options.enableColumnReorder&&sortableSideLeftInstance&&"function"==typeof sortableSideLeftInstance.destroy&&(sortableSideLeftInstance.destroy(),sortableSideRightInstance.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 destroyAllInstances(o){if(o){const t=Array.isArray(o)?o:[o];let e;for(;null!=(e=t.pop());)e&&"function"==typeof e.destroy&&e.destroy()}return o=Array.isArray(o)?[]:null}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=null,n=-1;if("number"==typeof e)t=columns[e],n=e;else if("string"==typeof e)for(i=0;i<columns.length;i++)columns[i].Id===e&&(t=columns[i],n=i);t&&getColAutosizeWidth(t,n,$(getCanvasNode(0,0)),o,n)}function treatAsLocked(e){return!e.ignoreHeaderText&&!e.sizeToRemaining&&e.contentSizePx===e.headerWidthPx&&e.widthPx<100}function autosizeColumns(e,o){var t={hiddenParents:null,oldPropArr:[]};cacheCssForHiddenInit(t),internalAutosizeColumns(e,o),restoreCssFromHiddenInit(t)}function internalAutosizeColumns(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,a=0,s=0,d=0;for(g=0;g<columns.length;g++)getColAutosizeWidth(h=columns[g],g,n,o,g),d+=h.autoSize.autosizeMode===Slick.ColAutosizeMode.Locked?h.width:treatAsLocked(h.autoSize)?h.autoSize.widthPx:0,s+=h.autoSize.autosizeMode===Slick.ColAutosizeMode.Locked?h.width:treatAsLocked(h.autoSize)?h.autoSize.widthPx:h.minWidth,r+=h.autoSize.widthPx,i+=h.autoSize.sizeToRemaining?0:h.autoSize.widthPx,a+=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-a)for(g=0;g<columns.length;g++){var h,p=(h=columns[g]).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+a>l*options.viewportSwitchToScrollModeWidthPercent/100||l<s)e=Slick.GridAutosizeColsMode.IgnoreViewport;else for(var m=i-d,w=l-d-a,g=0;g<columns.length;g++)p=(h=columns[g]).width,h.autoSize.autosizeMode===Slick.ColAutosizeMode.Locked||treatAsLocked(h.autoSize)||(h.autoSize.sizeToRemaining?p=h.minWidth:((p=w/m*h.autoSize.widthPx-1)<h.minWidth&&(p=h.minWidth),m-=h.autoSize.widthPx,w-=p)),treatAsLocked(h.autoSize)&&(p=h.autoSize.widthPx)<h.minWidth&&(p=h.minWidth),h.rerenderOnResize&&h.width!=p&&(t=!0),h.width=p;if(e===Slick.GridAutosizeColsMode.IgnoreViewport)for(g=0;g<columns.length;g++)p=columns[g].autoSize.widthPx,columns[g].rerenderOnResize&&columns[g].width!=p&&(t=!0),columns[g].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,n,l){var r=e.autoSize;if(r.widthPx=e.width,r.autosizeMode!==Slick.ColAutosizeMode.Locked&&r.autosizeMode!==Slick.ColAutosizeMode.Guide){var i=getDataLength();const s=new RegExp(/\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{3})?Z/);r.autosizeMode===Slick.ColAutosizeMode.ContentIntelligent&&(a=r.colDataTypeOf,0<i&&((i=getDataItem(0))&&(i=i[e.field],"object"===(a=typeof(i=s.test(i)?Date.parse(i):i))&&(i instanceof Date&&(a="date"),"undefined"!=typeof moment&&i instanceof moment&&(a="moment")))),"boolean"===a&&(r.colValueArray=[!0,!1]),"number"===a&&(r.valueFilterMode=Slick.ValueFilterMode.GetGreatestAndSub,r.rowSelectionMode=Slick.RowSelectionMode.AllRows),"string"===a&&(r.valueFilterMode=Slick.ValueFilterMode.GetLongestText,r.rowSelectionMode=Slick.RowSelectionMode.AllRows,r.allowAddlPercent=5),"date"===a&&(r.colValueArray=[new Date(2009,8,30,12,20,20)]),"moment"===a&&"undefined"!=typeof moment&&(r.colValueArray=[moment([2009,8,30,12,20,20])]));0===(i=r.contentSizePx=getColContentSize(e,o,t,n,l))&&(i=r.widthPx);var a=r.allowAddlPercent?1+r.allowAddlPercent/100:1,i=i*a+options.autosizeColPaddingPx;e.minWidth&&i<e.minWidth&&(i=e.minWidth),e.maxWidth&&i>e.maxWidth&&(i=e.maxWidth),(r.autosizeMode===Slick.ColAutosizeMode.ContentExpandOnly||e.editor&&e.editor.ControlFillsColumn)&&i<e.width&&(i=e.width),r.widthPx=i}}function getColContentSize(o,e,t,n,l){var r,i=o.autoSize,a=1,s=0,d=0;if(i.headerWidthPx=0,i.ignoreHeaderText||(i.headerWidthPx=getColHeaderWidth(o)),0===i.headerWidthPx&&(i.headerWidthPx=o.width||o.maxWidth||o.minWidth||20),i.colValueArray)d=getColWidth(o,t,i.colValueArray);else{var c={},e=(c.colIndex=e,c.rowCount=getDataLength(),c.startIndex=0,c.endIndex=c.rowCount-1,c.valueArr=null,c.getRowVal=function(e){return getDataItem(e)[o.field]},(n?i.rowSelectionModeOnInit:void 0)||i.rowSelectionMode);if(e===Slick.RowSelectionMode.FirstRow&&(c.endIndex=0),e===Slick.RowSelectionMode.LastRow&&(c.endIndex=c.startIndex=c.rowCount-1),e===Slick.R