From b59527e5858a79de2a70c3a64b0526eef2cccf66 Mon Sep 17 00:00:00 2001 From: Stijn Hoop Date: Thu, 2 Nov 2017 20:02:53 +0100 Subject: [PATCH] Add fix from Maheshkumar-Kakade for upstream SlickGrid issue #223 See https://github.com/mleibman/SlickGrid/issues/223#issuecomment-34407932 --- dist/slick.es6.min.js | 4 ++-- dist/slick.es6.min.js.map | 2 +- src/slick.grid.js | 46 +++++++++++++++++++++++---------------- 3 files changed, 30 insertions(+), 22 deletions(-) diff --git a/dist/slick.es6.min.js b/dist/slick.es6.min.js index f7be606..252b40f 100644 --- a/dist/slick.es6.min.js +++ b/dist/slick.es6.min.js @@ -4,6 +4,6 @@ e.type in Xe&&(t=Xe[e.type]))for(o=0,n=t.length;o").appendTo($paneTopR),$footerRowScrollerL=(0,_jquery2.default)("
").appendTo($paneTopL),$footerRowScroller=(0,_jquery2.default)().add($footerRowScrollerL).add($footerRowScrollerR),$footerRowSpacerL=(0,_jquery2.default)("
").css("width",getCanvasWidth()+scrollbarDimensions.width+"px").appendTo($footerRowScrollerL),$footerRowSpacerR=(0,_jquery2.default)("
").css("width",getCanvasWidth()+scrollbarDimensions.width+"px").appendTo($footerRowScrollerR),$footerRowL=(0,_jquery2.default)("
").appendTo($footerRowScrollerL),$footerRowR=(0,_jquery2.default)("
").appendTo($footerRowScrollerR),$footerRow=(0,_jquery2.default)().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.bind("selectstart.ui",function(e){return(0,_jquery2.default)(e.target).is("input,textarea")}),setFrozenOptions(),setPaneVisibility(),setScroller(),setOverflow(),updateColumnCaches(),createColumnHeaders(),createColumnGroupHeaders(),createColumnFooter(),setupColumnSort(),createCssRules(),resizeCanvas(),bindAncestorScrollEvents(),$container.bind("resize.slickgrid",resizeCanvas),$viewport.on("scroll",handleScroll),_jquery2.default.fn.mousewheel&&(options.frozenColumn>-1||hasFrozenRows)&&$viewport.on("mousewheel",handleMouseWheel),$headerScroller.bind("contextmenu",handleHeaderContextMenu).bind("click",handleHeaderClick).delegate(".slick-header-column","mouseenter",handleHeaderMouseEnter).delegate(".slick-header-column","mouseleave",handleHeaderMouseLeave),$headerRowScroller.bind("scroll",handleHeaderRowScroll),$footerRowScroller.bind("scroll",handleFooterRowScroll),$focusSink.add($focusSink2).bind("keydown",handleKeyDown),$canvas.bind("keydown",handleKeyDown).bind("click",handleClick).bind("dblclick",handleDblClick).bind("contextmenu",handleContextMenu).delegate(".slick-cell","mouseenter",handleMouseEnter).delegate(".slick-cell","mouseleave",handleMouseLeave),(0,_interact2.default)($canvas[0]).allowFrom("div.slick-cell").draggable({onmove:handleDrag,onstart:handleDragStart,onend:handleDragEnd}).styleCursor(!1),navigator.userAgent.toLowerCase().match(/webkit/)&&navigator.userAgent.toLowerCase().match(/macintosh/)&&$canvas.on("mousewheel",handleMouseWheel))}function hasFrozenColumns(){return options.frozenColumn>-1}function registerPlugin(e){plugins.unshift(e),e.init(self)}function unregisterPlugin(e){for(var t=plugins.length;t>=0;t--)if(plugins[t]===e){plugins[t].destroy&&plugins[t].destroy(),plugins.splice(t,1);break}}function setSelectionModel(e){selectionModel&&(selectionModel.onSelectedRangesChanged.unsubscribe(handleSelectedRangesChanged),selectionModel.destroy&&selectionModel.destroy()),selectionModel=e,selectionModel&&(selectionModel.init(self),selectionModel.onSelectedRangesChanged.subscribe(handleSelectedRangesChanged))}function getSelectionModel(){return selectionModel}function getCanvasNode(){return $canvas[0]}function getActiveCanvasNode(e){return setActiveCanvasNode(e),$activeCanvasNode[0]}function getCanvases(){return $canvas}function setActiveCanvasNode(e){e&&($activeCanvasNode=(0,_jquery2.default)(e.target).closest(".grid-canvas"))}function getViewportNode(){return $viewport[0]}function getActiveViewportNode(e){return setActiveViewPortNode(e),$activeViewportNode[0]}function setActiveViewportNode(e){e&&($activeViewportNode=(0,_jquery2.default)(e.target).closest(".slick-viewport"))}function measureScrollbar(){var e=(0,_jquery2.default)("
").appendTo(document.body),t={width:e.width()-e[0].clientWidth,height:e.height()-e[0].clientHeight};return e.remove(),t}function getHeadersWidth(){headersWidth=headersWidthL=headersWidthR=0;for(var e=0,t=columns.length;e-1&&e>options.frozenColumn?headersWidthR+=o:headersWidthL+=o}hasFrozenColumns()?(headersWidthL+=1e3,headersWidthR=Math.max(headersWidthR,viewportW)+headersWidthL,headersWidthR+=scrollbarDimensions.width):(headersWidthL+=scrollbarDimensions.width,headersWidthL=Math.max(headersWidthL,viewportW)+1e3),headersWidth=headersWidthL+headersWidthR}function getHeadersWidthL(){return headersWidthL=0,columns.forEach(function(e,t){options.frozenColumn>-1&&t>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,t){options.frozenColumn>-1&&t>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,t=columns.length;for(canvasWidthL=canvasWidthR=0;t--;)hasFrozenColumns()&&t>options.frozenColumn?canvasWidthR+=columns[t].width:canvasWidthL+=columns[t].width;var o=canvasWidthL+canvasWidthR;return options.fullWidthRows?Math.max(o,e):o}function updateCanvasWidth(e){var t,o=canvasWidth,n=canvasWidthL,r=canvasWidthR;canvasWidth=getCanvasWidth(),t=canvasWidth!==o||canvasWidthL!==n||canvasWidthR!==r,(t||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),$footerRowScrollerL.width(canvasWidthL),$footerRowScrollerR.width(viewportW-canvasWidthL),$footerRowL.width(canvasWidthL),$footerRowR.width(canvasWidthR),$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),$footerRowScrollerL.width("100%"),$footerRowL.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)),$footerRowSpacerL.width(canvasWidth+(viewportHasVScroll?scrollbarDimensions.width:0)),$footerRowSpacerR.width(canvasWidth+(viewportHasVScroll?scrollbarDimensions.width:0)),(t||e)&&applyColumnWidths()}function disableSelection(e){e&&e.jquery&&e.attr("unselectable","on").css("MozUserSelect","none").bind("selectstart.ui",function(){return!1})}function getMaxSupportedCssHeight(){for(var e=1e6,t=navigator.userAgent.toLowerCase().match(/firefox/)?6e6:1e9,o=(0,_jquery2.default)("
").appendTo(document.body);;){var n=2*e;if(o.css("height",n),n>t||o.height()!==n)break;e=n}return o.remove(),e}function bindAncestorScrollEvents(){for(var e=hasFrozenRows&&!options.frozenBottom?$canvasBottomL[0]:$canvasTopL[0];(e=e.parentNode)!=document.body&&null!=e;)if(e==$viewportTopL[0]||e.scrollWidth!=e.clientWidth||e.scrollHeight!=e.clientHeight){var t=(0,_jquery2.default)(e);$boundAncestors=$boundAncestors?$boundAncestors.add(t):t,t.bind("scroll."+uid,handleActiveCellPositionChange)}}function unbindAncestorScrollEvents(){$boundAncestors&&($boundAncestors.unbind("scroll."+uid),$boundAncestors=null)}function updateColumnHeader(e,t,o){if(initialized){var n=getColumnIndex(e);if(null!=n){var r=columns[n],i=$headers.children().eq(n);i&&(void 0!==t&&(columns[n].name=t),void 0!==o&&(columns[n].toolTip=o),trigger(self.onBeforeHeaderCellDestroy,{node:i[0],column:r}),i.attr("title",o||"").children().eq(0).html(t),trigger(self.onHeaderCellRendered,{node:i[0],column:r}))}}}function getHeaderRow(){return hasFrozenColumns()?$headerRow:$headerRow[0]}function getHeaderRowColumn(e){var t,o=getColumnIndex(e);hasFrozenColumns()?o<=options.frozenColumn?t=$headerRowL:(t=$headerRowR,o-=options.frozenColumn+1):t=$headerRowL;var n=t.children().eq(o);return n&&n[0]}function getFooterRow(){return hasFrozenColumns()?$footerRow:$footerRow[0]}function getFooterRowColumn(e){var t,o=getColumnIndex(e);hasFrozenColumns()?o<=options.frozenColumn?t=$footerRowL:(t=$footerRowR,o-=options.frozenColumn+1):t=$footerRowL;var n=t.children().eq(o);return n&&n[0]}function createColumnFooter(){$footerRow.find(".slick-footerrow-column").each(function(){var e=(0,_jquery2.default)(this).data("column");e&&trigger(self.onBeforeFooterRowCellDestroy,{node:this,column:e})}),$footerRowL.empty(),$footerRowR.empty();for(var e=0;e
").data("column",t).addClass(hasFrozenColumns()&&e<=options.frozenColumn?"frozen":"").appendTo(hasFrozenColumns()&&e>options.frozenColumn?$footerRowR:$footerRowL);trigger(self.onFooterRowCellRendered,{node:o[0],column:t})}}function createColumnGroupHeaders(){var e=0,t=!1;if(treeColumns.hasDepth()){for(var o=0;o<$groupHeadersL.length;o++){$groupHeadersL[o].empty(),$groupHeadersR[o].empty();var n=treeColumns.getColumnsInDepth(o);for(var r in n){var i=n[r];e+=i.extractColumns().length,hasFrozenColumns()&&0==o&&e-1===options.frozenColumn&&(t=!0),(0,_jquery2.default)("
").html(""+i.name+"").attr("id",""+uid+i.id).attr("title",i.toolTip||"").data("column",i).addClass(i.headerCssClass||"").addClass(hasFrozenColumns()&&e-1<=options.frozenColumn?"frozen":"").appendTo(hasFrozenColumns()&&e-1>options.frozenColumn?$groupHeadersR[o]:$groupHeadersL[o])}if(hasFrozenColumns()&&0==o&&!t){$groupHeadersL[o].empty(),$groupHeadersR[o].empty(),alert("All columns of group should to be grouped!");break}}applyColumnGroupHeaderWidths()}}function createColumnHeaders(){function e(){(0,_jquery2.default)(this).addClass("ui-state-hover")}function t(){(0,_jquery2.default)(this).removeClass("ui-state-hover")}$headers.find(".slick-header-column").each(function(){var e=(0,_jquery2.default)(this).data("column");e&&trigger(self.onBeforeHeaderCellDestroy,{node:this,column:e})}),$headerL.empty(),$headerR.empty(),getHeadersWidth(),$headerL.width(headersWidthL),$headerR.width(headersWidthR),$headerRow.find(".slick-headerrow-column").each(function(){var e=(0,_jquery2.default)(this).data("column");e&&trigger(self.onBeforeHeaderRowCellDestroy,{node:this,column:e})}),$headerRowL.empty(),$headerRowR.empty();for(var o=0;o").html(""+n.name+"").width(n.width-headerColumnWidthDiff).attr("id",""+uid+n.id).attr("title",n.toolTip||"").data("column",n).addClass(n.headerCssClass||"").addClass(hasFrozenColumns()&&o<=options.frozenColumn?"frozen":"").appendTo(r);if((options.enableColumnReorder||n.sortable)&&s.on("mouseenter",e).on("mouseleave",t),n.sortable&&(s.addClass("slick-header-sortable"),s.append("")),trigger(self.onHeaderCellRendered,{node:s[0],column:n}),options.showHeaderRow){var l=(0,_jquery2.default)("
").data("column",n).appendTo(i);trigger(self.onHeaderRowCellRendered,{node:l[0],column:n})}}setSortColumns(sortColumns),setupColumnResize(),options.enableColumnReorder&&setupColumnReorder()}function setupColumnSort(){$headers.click(function(e){if(e.metaKey=e.metaKey||e.ctrlKey,!(0,_jquery2.default)(e.target).hasClass("slick-resizable-handle")){var t=(0,_jquery2.default)(e.target).closest(".slick-header-column");if(t.length){var o=t.data("column");if(o.sortable){if(!getEditorLock().commitCurrentEdit())return;for(var n=null,r=0;r-1&&(e.splice(o,1),remove(e,t))}function columnPositionValidInGroup(e){var t=currentPositionInHeader(e[0].id),o=limitPositionInGroup(e.data("column").id),n=o.start<=t&&t<=o.end;return{limit:o,valid:n,message:n?"":'Column "'.concat(e.text(),'" can be reordered only within the "',o.group.name,'" group!')}}function setupColumnReorder(){var e=0,t=0,o=document.createElement("div");o.className="interact-placeholder",(0,_interact2.default)(".slick-header-column").ignoreFrom(".slick-resizable-handle").draggable({inertia:!0,restrict:{restriction:"parent",endOnly:!0,elementRect:{top:0,left:0,bottom:0,right:0}},autoScroll:!0,axis:"x",onstart:function(n){e=0,t=n.target.offsetWidth,$headers.find(".slick-header-column").each(function(e){(0,_jquery2.default)(this).data("index",e)}),o.style.height=n.target.offsetHeight+"px",o.style.width=t+"px",(0,_jquery2.default)(n.target).after(o).css({position:"absolute",zIndex:1e3,marginLeft:(0,_jquery2.default)(n.target).position().left-1e3})},onmove:function(t){e+=t.dx,t.target.style.transform="translate3d("+e+"px, -3px, 100px)"},onend:function(n){if(e=0,t=0,treeColumns.hasDepth()){var r=columnPositionValidInGroup((0,_jquery2.default)(n.target)),i=r.limit,s=!r.valid;s&&alert(r.message)}if(o.parentNode.removeChild(o),s)return n.target.style.transform="none",void setColumns(getColumns());(0,_jquery2.default)(n.target).css({position:"relative",zIndex:"",marginLeft:0,transform:"none"});var l=[];$headers.find(".slick-header-column").each(function(e){l.push(columns[(0,_jquery2.default)(this).data("index")]),(0,_jquery2.default)(this).removeData("index")}),setColumns(l),trigger(self.onColumnsReordered,{impactedColumns:getImpactedColumns(i),grid:self}),setupColumnResize()}}).dropzone({accept:".slick-header-column",ondragenter:function(e){e.target.classList.add("interact-drop-active"),e.relatedTarget.classList.add("interact-can-drop")},ondragleave:function(e){e.target.classList.remove("interact-drop-active"),e.relatedTarget.classList.remove("interact-can-drop")},ondrop:function(t){t.target.classList.remove("interact-drop-active"),t.relatedTarget.classList.remove("interact-can-drop"),(0,_jquery2.default)(t.target)[e>0?"after":"before"](t.relatedTarget)}}).styleCursor(!1)}function getImpactedColumns(e){var t=[];if(void 0!=e)for(var o=e.start;o<=e.end;o++)t.push(columns[o]);else t=columns;return t}function setupColumnResize(){var e,t,o,n;t=$headers.children(),t.find(".slick-resizable-handle").remove(),t.each(function(e,t){columns[e].resizable&&(void 0===o&&(o=e),n=e)}),void 0!==o&&t.each(function(t,r){if(!(t=n)){e=(0,_jquery2.default)(r);var i=(0,_jquery2.default)("
");if(i.appendTo(r),!e.data("resizable")){var s=columns[t];s.resizable&&(e.data("resizable",!0),(0,_interact2.default)(r).resizable({preserveAspectRatio:!1,edges:{left:!0,right:!0,bottom:!1,top:!1}}).on("resizestart",function(e){return!!getEditorLock().commitCurrentEdit()&&(s.previousWidth=e.rect.width,void e.target.classList.add("slick-header-column-active"))}).on("resizemove",function(e){var t=e.dx,o=s.width+=t;s.minWidth>0&&s.minWidth>o?o=s.minWidth:s.maxWidth>0&&s.maxWidth=0&&options.frozenColumn=0&&options.frozenRow-1){hasFrozenRows=!0,frozenRowsHeight=options.frozenRow*options.rowHeight;var e=getDataLength()||this.data.length;actualFrozenRow=options.frozenBottom?e-options.frozenRow:options.frozenRow}else 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?"hidden":"scroll":hasFrozenRows?"hidden":"auto","overflow-y":hasFrozenColumns()?"hidden":hasFrozenRows?"scroll":"auto"}),$viewportTopR.css({"overflow-x":hasFrozenColumns()?hasFrozenRows?"hidden":"scroll":hasFrozenRows?"hidden":"auto","overflow-y":hasFrozenColumns()?hasFrozenRows?"scroll":"auto":hasFrozenRows?"scroll":"auto"}),$viewportBottomL.css({"overflow-x":hasFrozenColumns()&&hasFrozenRows?"scroll":"auto","overflow-y":hasFrozenColumns()?"hidden":hasFrozenRows?"scroll":"auto"}),$viewportBottomR.css({"overflow-x":hasFrozenColumns()&&hasFrozenRows?"scroll":"auto","overflow-y":(hasFrozenColumns(),"auto")})}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,t=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],o=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"];e=(0,_jquery2.default)("").appendTo($headers),headerColumnWidthDiff=headerColumnHeightDiff=0,"border-box"!=e.css("box-sizing")&&"border-box"!=e.css("-moz-box-sizing")&&"border-box"!=e.css("-webkit-box-sizing")&&(_jquery2.default.each(t,function(t,o){headerColumnWidthDiff+=parseFloat(e.css(o))||0}),_jquery2.default.each(o,function(t,o){headerColumnHeightDiff+=parseFloat(e.css(o))||0})),e.remove();var n=(0,_jquery2.default)("
").appendTo($canvas);e=(0,_jquery2.default)("").appendTo(n),cellWidthDiff=cellHeightDiff=0,"border-box"!=e.css("box-sizing")&&"border-box"!=e.css("-moz-box-sizing")&&"border-box"!=e.css("-webkit-box-sizing")&&(_jquery2.default.each(t,function(t,o){cellWidthDiff+=parseFloat(e.css(o))||0}),_jquery2.default.each(o,function(t,o){cellHeightDiff+=parseFloat(e.css(o))||0})),n.remove(),absoluteColumnMinWidth=Math.max(headerColumnWidthDiff,cellWidthDiff)}function createCssRules(){$style=(0,_jquery2.default)("