zk.afterLoad('zul.mesh, zkmax', function() { var xFrozen = {}; zk.override(zul.mesh.Frozen.prototype, xFrozen, { _findFrozenCols : function(frozenColNum, rowNodes, rowIndex, nextRowSpanArr) { var spanLookup = this._buildSpanLookupTable(frozenColNum, rowNodes); //console.log(spanLookup); //var result = xFrozen._findFrozenCols.apply(this, arguments); var cellInfos = spanLookup[rowIndex]; var cellsInRow = cellInfos .filter(cellInfo => cellInfo[1] === rowIndex) .map(cellInfo => cellInfo[0]); var numFrozenCellsInRow = new Set(cellsInRow).size; return numFrozenCellsInRow; }, _buildSpanLookupTable: function(frozenColNum, rowNodes) { var spanLookup = []; for(var i = 0; i < rowNodes.length; i++) { spanLookup[i] = []; } rowNodes.forEach((rowNode, rowIndex) => { var cellNodes = rowNode.childNodes; var colIndex = 0; cellNodes.forEach(cellNode => { while(spanLookup[rowIndex][colIndex]) { colIndex++; //adjust colIndex by previous rowSpans } if(colIndex < frozenColNum) { var colSpan = cellNode.colSpan || 1; var rowSpan = cellNode.rowSpan || 1; for(var i = 0; i < rowSpan; i++) { for(var j = 0; j < colSpan; j++) { spanLookup[rowIndex + i][colIndex + j] = [cellNode, rowIndex, colIndex]; } } } }); }); return spanLookup; } });//zk.override });//zk.afterLoad