{"version":3,"sources":["AX6UIGrid_body.js"],"names":["_jqmin","require","_AX6Util","_AX6UIGrid_util","_AX6UIGrid_data","_AX6UIGrid_page","_AX6UIGrid_header","_AX6UIGrid_inline_editor","_AX6UIGrid_collector","_AX6UIGrid_formatter","_AX6UIGrid_scroller","columnSelect","focusClear","self","this","_column","c","focusedColumn","$","panel","panelName","find","dindex","rowIndex","colIndex","removeAttr","clear","selectedColumn","init","column","isInlineEditing","editKey","inlineEditing","call","colspan","start","end","doindex","update","trl","xvar","selectedRange","range","s","data","min","e","Math","max","r","bodyRowTable","rows","length","inlineEdit","_panels","frozenRowIndex","push","frozenColumnIndex","join","attr","columnSelector","cell","on","instanceId","getAttribute","Number","off","_jqmin2","default","document","body","css","resetFrozenColumn","dividedBodyRowObj","_AX6UIGrid_util2","divideTableByFrozenColumnIndex","columnAttr","asideBodyRowData","dataTable","i","l","cols","col","label","rowspan","_col","cfg","showLineNumber","width","lineNumberColumnWidth","extend","rowSelectorColumnWidth","key","leftData","bodyGroupingTable","asideBodyGroupingData","bodyRowData","grouping","dividedBodyGroupingObj","leftBodyGroupingData","rightData","bodyGroupingMap","makeBodyRowMap","_width","footSumTable","leftFootSumData","dividedFootSumObj","getFieldValue","_list","_item","_index","_value","_returnPlainText","<",">","bodyGroupingData","_key","footSum","config","editor","_editor","type","_AX6UIGrid_inline_editor2","editMode","_AX6UIGrid_data2","getValue","__origin_index__","_AX6Util2","isFunction","disabled","item","value","getHtml","valueProcessor","formatter","list","caller","customFormatter","_AX6UIGrid_formatter2","that","returnValue","test","replace","tag","tagsToReplace","treeControl","__value","keys","tree","columnKeys","indentNodeHtml","children","arrowWidth","depth","indentWidth","collapse","icons","collapsedArrow","openedArrow","iconWidth","collapsedGroupIcon","groupIcon","itemIcon","use","getGroupingValue","_label","__groupingBy","collector","customCollector","_AX6UIGrid_collector2","__groupingList","getSumFieldValue","active","_focusedColumn","_e","_initValue","_type","checked","newValue","trueValue","falseValue","updateRowState","editorConfig","columnKey","useReturnToSave","__isGrouping","originalValue","initValue","__editor","number","money","isNothing","$inlineEditor","$inlineEditorCell","deActive","_msg","bodyRowMap","editorValue","get","tagName","val","action","CANCEL","_dindex","RETURN","_doindex","_newValue","__clear","repaintCell","bindedAx5ui","ax5picker","ax5select","undefined","keydown","_options","processor","k","colGroup","moveFocus","repaint","_reset","proxyList","paintStartRowIndex","paintStartColumnIndex","virtualPaintStartRowIndex","floor","position","top","bodyTrHeight","paintRowCountTopMargin","isNaN","paintEndColumnIndex","nopaintLeftColumnsWidth","nopaintRightColumnsWidth","left","virtualScrollX","ci","_ex","_sx","bodyScrollLeft","bodyWidth","scrollContentWidth","padding-left","padding-right","isFirstPaint","headerColGroup","leftBodyRowData","footSumData","bodyAlign","align","virtualPaintRowCount","paintRowCount","bodyHeight","paintRowCountMargin","abs","ceil","concat","splice","getTableByStartEndColumnIndex","scrollContentHeight","needToPaintSum","livePanelKeys","repaintBody","_elTargetKey","_colGroup","_bodyRow","_groupRow","_scrollConfig","_elTarget","SS","cgi","dl","cl","cellHeight","colAlign","isScrolled","cgl","di","tri","columnHeight","columnBorderWidth","stripeString","len","odi","rowTable","trStyleClass","isGroupingRow","selected","disableSelection","index","_selectedColumn","attrs","tdCSS_class","styleClass","lineHeight","multiLine","_cellHeight","columnPadding","empty","innerHTML","isFootSum","tblRowMaps","token","hasMergeTd","tableTrs","trMaps","tdObj","mergeCellsBody","ri","rl","tableTrTds","childNodes","mergeCells","search","text","prevTokenColIndexs","hasFalse","forEach","ti","_loop2","_loop","virtualScrollY","frozenScrollConfig","repaintSum","scrollConfig","asidePanelWidth","asideColGroup","slice","rightSum","leftHeaderColGroup","dataRowCount","updateCell","updateWith","_AX6UIGrid_page2","statusUpdate","updateWithCell","_colIndex","_panelName","_rowIndex","findPanelByColumnIndex","height","replaceGroupTr","repaintRow","replaceTr","_states","_state","toggleCollapse","_collapse","_data","scrollTo","opts","selectedClear","pi","__throttledScroll","callback","__original_index__","cellChecked","moveResult","originalColumn","while_i","nPanelInfo","timeoutUnUse","_dy","noRepaint","focus","UD","_dx","newTop","_AX6UIGrid_scroller2","isScrollTo","scrollLeft","isScrollPanel","containerPanelName","$column","resize","_AX6UIGrid_header2","newLeft","outerWidth","_position","getBody","INDEX","po","click","page","HOME","dblClick","getExcelString","onDBLClick","row","targetDBLClick","onClick","targetClick","isObject","multipleSelect","clearSelect","select","internalCall","rowSelector","param","target","t","onContextMenu","stopEvent","originalEvent","selectedDataIndexs","touchmoved","tree-control","_el","virtualScrollAccelerated","findParentNode","element","gridSelf","updateRowStateAll","blur","virtualScrollYCountMargin","throttle","virtualScrollAcceleratedDelayTime"],"mappings":"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","file":"AX6UIGrid_body.js","sourcesContent":["import jQuery from \"jqmin\";\nimport U from \"../AX6Util\";\nimport UTIL from \"./AX6UIGrid_util\";\nimport DATA from \"./AX6UIGrid_data\";\nimport PAGE from \"./AX6UIGrid_page\";\nimport HEADER from \"./AX6UIGrid_header\";\n\nimport INLINE_EDITOR from \"./AX6UIGrid_inline_editor\";\nimport COLLECTOR from \"./AX6UIGrid_collector\";\nimport FORMATTER from \"./AX6UIGrid_formatter\";\nimport SCROLLER from \"./AX6UIGrid_scroller\";\n/* ~~~~~~~~~~~~~~~~~~ end of import  ~~~~~~~~~~~~~~~~~~~~ */\n\nconst columnSelect = {\n  focusClear: function () {\n    let self = this, _column;\n    for (let c in self.focusedColumn) {\n      _column = self.focusedColumn[c];\n      if (_column) {\n        self.$.panel[_column.panelName]\n          .find('[data-ax6grid-tr-data-index=\"' + _column.dindex + '\"]')\n          .find('[data-ax6grid-column-rowindex=\"' + _column.rowIndex + '\"][data-ax6grid-column-colindex=\"' + _column.colIndex + '\"]')\n          .removeAttr('data-ax6grid-column-focused');\n      }\n    }\n    self.focusedColumn = {};\n  },\n  clear: function () {\n    let self = this, _column;\n    for (let c in self.selectedColumn) {\n      _column = self.selectedColumn[c];\n      if (_column) {\n        self.$.panel[_column.panelName]\n          .find('[data-ax6grid-tr-data-index=\"' + _column.dindex + '\"]')\n          .find('[data-ax6grid-column-rowindex=\"' + _column.rowIndex + '\"][data-ax6grid-column-colindex=\"' + _column.colIndex + '\"]')\n          .removeAttr('data-ax6grid-column-selected');\n      }\n    }\n    self.selectedColumn = {};\n  },\n  init: function (column) {\n    let self = this;\n    if (this.isInlineEditing) {\n      for (let editKey in this.inlineEditing) {\n        if (editKey == column.dindex + \"_\" + column.colIndex + \"_\" + column.rowIndex) {\n          return this;\n        }\n      }\n    }\n\n    // focus\n    columnSelect.focusClear.call(self);\n    self.focusedColumn[column.dindex + \"_\" + column.colIndex + \"_\" + column.rowIndex] = {\n      panelName: column.panelName,\n      dindex: column.dindex,\n      doindex: column.doindex,\n      rowIndex: column.rowIndex,\n      colIndex: column.colIndex,\n      colspan: column.colspan\n    };\n\n    // select\n    columnSelect.clear.call(self);\n    self.xvar.selectedRange = {\n      start: [column.dindex, column.rowIndex, column.colIndex, column.colspan - 1],\n      end: null\n    };\n    self.selectedColumn[column.dindex + \"_\" + column.colIndex + \"_\" + column.rowIndex] = (function (data) {\n      if (data) {\n        return false;\n      } else {\n        return {\n          panelName: column.panelName,\n          dindex: column.dindex,\n          doindex: column.doindex,\n          rowIndex: column.rowIndex,\n          colIndex: column.colIndex,\n          colspan: column.colspan\n        }\n      }\n    })(self.selectedColumn[column.dindex + \"_\" + column.colIndex + \"_\" + column.rowIndex]);\n\n    this.$.panel[column.panelName]\n      .find('[data-ax6grid-tr-data-index=\"' + column.dindex + '\"]')\n      .find('[data-ax6grid-column-rowindex=\"' + column.rowIndex + '\"][data-ax6grid-column-colindex=\"' + column.colIndex + '\"]')\n      .attr('data-ax6grid-column-focused', \"true\")\n      .attr('data-ax6grid-column-selected', \"true\");\n\n    if (this.isInlineEditing) {\n      inlineEdit.deActive.call(this, \"RETURN\");\n    }\n  },\n  update: function (column) {\n    const self = this;\n    let dindex, doindex, colIndex, rowIndex, trl;\n\n    self.xvar.selectedRange[\"end\"] = [column.dindex, column.rowIndex, column.colIndex, column.colspan - 1];\n    columnSelect.clear.call(self);\n\n    let range = {\n      r: {\n        s: Math.min(self.xvar.selectedRange[\"start\"][0], self.xvar.selectedRange[\"end\"][0]),\n        e: Math.max(self.xvar.selectedRange[\"start\"][0], self.xvar.selectedRange[\"end\"][0])\n      },\n      c: {\n        s: Math.min(self.xvar.selectedRange[\"start\"][2], self.xvar.selectedRange[\"end\"][2]),\n        e: Math.max(self.xvar.selectedRange[\"start\"][2] + self.xvar.selectedRange[\"start\"][3], self.xvar.selectedRange[\"end\"][2] + self.xvar.selectedRange[\"end\"][3])\n      }\n    };\n\n    dindex = range.r.s;\n    for (; dindex <= range.r.e; dindex++) {\n\n\n      trl = this.bodyRowTable.rows.length;\n      rowIndex = 0;\n      for (; rowIndex < trl; rowIndex++) {\n        colIndex = range.c.s;\n        for (; colIndex <= range.c.e; colIndex++) {\n          var _panels   = [],\n              panelName = \"\";\n\n          if (self.xvar.frozenRowIndex > dindex) _panels.push(\"top\");\n          if (self.xvar.frozenColumnIndex > colIndex) _panels.push(\"left\");\n          _panels.push(\"body\");\n          if (_panels[0] !== \"top\") _panels.push(\"scroll\");\n          panelName = _panels.join(\"-\");\n\n          self.selectedColumn[dindex + \"_\" + colIndex + \"_\" + rowIndex] = {\n            panelName: panelName,\n            dindex: dindex,\n            rowIndex: rowIndex,\n            colIndex: colIndex,\n            colspan: column.colspan\n          };\n\n          _panels = null;\n          panelName = null;\n        }\n      }\n    }\n    dindex = null;\n    doindex = null;\n    colIndex = null;\n    rowIndex = null;\n\n    for (var c in self.selectedColumn) {\n      var _column = self.selectedColumn[c];\n      if (_column) {\n        self.$.panel[_column.panelName]\n          .find('[data-ax6grid-tr-data-index=\"' + _column.dindex + '\"]')\n          .find('[data-ax6grid-column-rowindex=\"' + _column.rowIndex + '\"][data-ax6grid-column-colindex=\"' + _column.colIndex + '\"]')\n          .attr('data-ax6grid-column-selected', 'true');\n      }\n    }\n\n  }\n};\n\nconst columnSelector = {\n  \"on\": function (cell) {\n    let self = this;\n\n    if (this.inlineEditing[cell.dindex + \"_\" + cell.colIndex + \"_\" + cell.rowIndex]) {\n      return;\n    }\n\n    columnSelect.init.call(self, cell);\n\n    this.$[\"container\"][\"body\"]\n      .on(\"mousemove.ax5grid-\" + this.instanceId, '[data-ax6grid-column-attr=\"default\"]', function (e) {\n        if (this.getAttribute(\"data-ax6grid-column-rowIndex\")) {\n          columnSelect.update.call(self, {\n            panelName: this.getAttribute(\"data-ax6grid-panel-name\"),\n            dindex: Number(this.getAttribute(\"data-ax6grid-data-index\")),\n            doindex: Number(this.getAttribute(\"data-ax6grid-data-o-index\")),\n            rowIndex: Number(this.getAttribute(\"data-ax6grid-column-rowIndex\")),\n            colIndex: Number(this.getAttribute(\"data-ax6grid-column-colIndex\")),\n            colspan: Number(this.getAttribute(\"colspan\"))\n          });\n          U.stopEvent(e);\n        }\n      })\n      .on(\"mouseup.ax5grid-\" + this.instanceId, function () {\n        columnSelector.off.call(self);\n      })\n      .on(\"mouseleave.ax5grid-\" + this.instanceId, function () {\n        columnSelector.off.call(self);\n      });\n\n    jQuery(document.body)\n      .attr('unselectable', 'on')\n      .css('user-select', 'none')\n      .on('selectstart', false);\n  },\n  \"off\": function () {\n\n    this.$[\"container\"][\"body\"]\n      .off(\"mousemove.ax5grid-\" + this.instanceId)\n      .off(\"mouseup.ax5grid-\" + this.instanceId)\n      .off(\"mouseleave.ax5grid-\" + this.instanceId);\n\n    jQuery(document.body)\n      .removeAttr('unselectable')\n      .css('user-select', 'auto')\n      .off('selectstart');\n  }\n};\n\nconst resetFrozenColumn = function () {\n  let cfg               = this.config,\n      dividedBodyRowObj = UTIL.divideTableByFrozenColumnIndex(this.bodyRowTable, this.xvar.frozenColumnIndex);\n\n\n  this.asideBodyRowData = (function (dataTable) {\n    let data = {rows: []};\n    for (let i = 0, l = dataTable.rows.length; i < l; i++) {\n      data.rows[i] = {cols: []};\n      if (i === 0) {\n        let col = {\n          label: \"\",\n          colspan: 1,\n          rowspan: dataTable.rows.length,\n          colIndex: null\n        }, _col = {};\n\n        if (cfg.showLineNumber) {\n          _col = jQuery.extend({}, col, {\n            width: cfg.lineNumberColumnWidth,\n            _width: cfg.lineNumberColumnWidth,\n            columnAttr: \"lineNumber\",\n            label: \"&nbsp;\", key: \"__d-index__\"\n          });\n          data.rows[i].cols.push(_col);\n        }\n        if (cfg.showRowSelector) {\n          _col = jQuery.extend({}, col, {\n            width: cfg.rowSelectorColumnWidth,\n            _width: cfg.rowSelectorColumnWidth,\n            columnAttr: \"rowSelector\",\n            label: \"\", key: \"__d-checkbox__\"\n          });\n          data.rows[i].cols.push(_col);\n        }\n      }\n    }\n\n    return data;\n  }).call(this, this.bodyRowTable);\n\n  //console.log(dividedBodyRowObj);\n\n  this.leftBodyRowData = dividedBodyRowObj.leftData;\n  this.bodyRowData = dividedBodyRowObj.rightData;\n\n  if (cfg.body.grouping) {\n    let dividedBodyGroupingObj = UTIL.divideTableByFrozenColumnIndex(this.bodyGroupingTable, this.xvar.frozenColumnIndex);\n    this.asideBodyGroupingData = (function (dataTable) {\n      let data = {rows: []};\n      for (let i = 0, l = dataTable.rows.length; i < l; i++) {\n        data.rows[i] = {cols: []};\n        if (i === 0) {\n          let col = {\n            label: \"\",\n            colspan: 1,\n            rowspan: dataTable.rows.length,\n            colIndex: null\n          }, _col = {};\n\n          if (cfg.showLineNumber) {\n            _col = jQuery.extend({}, col, {\n              width: cfg.lineNumberColumnWidth,\n              _width: cfg.lineNumberColumnWidth,\n              columnAttr: \"lineNumber\",\n              label: \"&nbsp;\", key: \"__d-index__\"\n            });\n            data.rows[i].cols.push(_col);\n          }\n          if (cfg.showRowSelector) {\n            _col = jQuery.extend({}, col, {\n              width: cfg.rowSelectorColumnWidth,\n              _width: cfg.rowSelectorColumnWidth,\n              columnAttr: \"rowSelector\",\n              label: \"\", key: \"__d-checkbox__\"\n            });\n            data.rows[i].cols.push(_col);\n          }\n        }\n      }\n\n      return data;\n    }).call(this, this.bodyGroupingTable);\n    this.leftBodyGroupingData = dividedBodyGroupingObj.leftData;\n    this.bodyGroupingData = dividedBodyGroupingObj.rightData;\n    this.bodyGroupingMap = UTIL.makeBodyRowMap.call(this, this.bodyGroupingTable);\n  }\n\n  this.leftFootSumData = {};\n  this.footSumData = {};\n  if (this.config.footSum) {\n    let dividedFootSumObj = UTIL.divideTableByFrozenColumnIndex(this.footSumTable, this.xvar.frozenColumnIndex);\n    this.leftFootSumData = dividedFootSumObj.leftData;\n    this.footSumData = dividedFootSumObj.rightData;\n  }\n};\n\nconst getFieldValue = function (_list, _item, _index, _col, _value, _returnPlainText) {\n\n  let _key = _col.key, tagsToReplace = {\n    '<': '&lt;',\n    '>': '&gt;'\n  };\n\n  if (_key === \"__d-index__\") {\n    return (typeof _item[\"__index\"] !== \"undefined\") ? _item[\"__index\"] + 1 : \"\";\n  }\n  else if (_key === \"__d-checkbox__\") {\n    return `<div class=\"checkBox\" style=\"max-height: ${_col.width - 10}px;min-height: ${_col.width - 10}px;\"></div>`;\n  }\n  else {\n    if (_col.editor && (function (_editor) {\n        if (_editor.type in INLINE_EDITOR) {\n          return (INLINE_EDITOR[_editor.type].editMode == \"inline\");\n        }\n        return false;\n      })(_col.editor)) { // editor가 inline타입이라면\n\n      _value = _value || DATA.getValue.call(this, _index, _item.__origin_index__, _key);\n\n      if (U.isFunction(_col.editor.disabled)) {\n        if (_col.editor.disabled.call({\n            list: _list,\n            dindex: _index,\n            item: _list[_index],\n            key: _key,\n            value: _value\n          })) {\n          return _value;\n        }\n      }\n\n      // print editor\n      return _returnPlainText ? _value : INLINE_EDITOR[_col.editor.type].getHtml(this, _col.editor, _value);\n    }\n\n    const valueProcessor = {\n      \"formatter\": function () {\n        let that = {\n          key: _key,\n          value: _value || DATA.getValue.call(this, _index, _item.__origin_index__, _key),\n          dindex: _index,\n          item: _item,\n          list: _list\n        };\n\n        let caller = (U.isFunction(_col.formatter) ? _col.formatter : this.customFormatter[_col.formatter] || FORMATTER[_col.formatter]);\n        return caller ? caller.call(that) : that.value;\n      },\n      \"default\": function () {\n        let returnValue = \"\";\n\n        if (typeof _value !== \"undefined\") {\n          returnValue = _value;\n        } else {\n          if (/[\\.\\[\\]]/.test(_key)) {\n            _value = DATA.getValue.call(this, _index, _item.__origin_index__, _key);\n          } else {\n            _value = _item[_key];\n          }\n\n          if (_value !== null && typeof _value !== \"undefined\") returnValue = _value;\n        }\n\n        // 키값이 Boolean일때 오류 발생하여 수정.\n        return (typeof returnValue !== \"string\") ? returnValue : returnValue.replace(/[<>]/g, function (tag) {\n          return tagsToReplace[tag] || tag;\n        });\n      },\n      \"treeControl\": function (__value) {\n        let cfg            = this.config,\n            keys           = this.config.tree.columnKeys,\n            indentNodeHtml = '';\n\n        if (_item[keys.children].length) {\n          indentNodeHtml += '<a ' +\n            'data-ax6grid-data-index=\"' + _index + '\" ' +\n            'data-ax6grid-column-attr=\"tree-control\" ' +\n            'data-ax6grid-tnode-arrow=\"\" ' +\n            'style=\"width: ' + cfg.tree.arrowWidth + 'px;padding-left:' + (_item[keys.depth] * cfg.tree.indentWidth) + 'px;\"' +\n            '>';\n          indentNodeHtml += (_item[keys.collapse]) ? cfg.tree.icons.collapsedArrow : cfg.tree.icons.openedArrow;\n          indentNodeHtml += '</a>';\n        } else {\n          indentNodeHtml += '<span ' +\n            'data-ax6grid-tnode-arrow=\"\" ' +\n            'style=\"width: ' + cfg.tree.arrowWidth + 'px;padding-left:' + (_item[keys.depth] * cfg.tree.indentWidth) + 'px;\"' +\n            '>&nbsp;</span>';\n        }\n\n        indentNodeHtml += '<span ' +\n          'data-ax6grid-tnode-item=\"' + ((_item[keys.children].length) ? 'group' : 'item') + '\" ' +\n          'style=\"width: ' + cfg.tree.iconWidth + 'px;\"' +\n          '>';\n        indentNodeHtml += (_item[keys.children].length) ? (_item[keys.collapse]) ? cfg.tree.icons.collapsedGroupIcon : cfg.tree.icons.groupIcon : cfg.tree.icons.itemIcon;\n        indentNodeHtml += '</span>';\n\n        return indentNodeHtml + __value;\n      }\n    };\n\n    let returnValue = (_col.formatter) ? valueProcessor.formatter.call(this) : valueProcessor.default.call(this);\n    if (this.config.tree.use && _col.treeControl) {\n      returnValue = valueProcessor.treeControl.call(this, returnValue);\n    }\n\n    return returnValue;\n  }\n\n};\n\nconst getGroupingValue = function (_item, _index, _col) {\n  let value, that, caller, _key = _col.key, _label = _col.label;\n\n  if (typeof _key === \"undefined\") {\n    that = {\n      key: _key,\n      list: _item.__groupingList,\n      groupBy: _item.__groupingBy\n    };\n    if (U.isFunction(_label)) {\n      value = _label.call(that);\n    } else {\n      value = _label;\n    }\n    _item[_col.colIndex] = value;\n    return value;\n  }\n  else if (_key === \"__d-index__\") {\n    return '';\n  }\n  else if (_key === \"__d-checkbox__\") {\n    return '';\n  }\n  else {\n    if (_col.collector) {\n      that = {\n        key: _key,\n        list: _item.__groupingList\n      };\n      _item[_col.colIndex] = value = (U.isFunction(_col.collector) ? _col.collector : this.customCollector[_col.collector] || COLLECTOR[_col.collector]).call(that);\n      if (_col.formatter) {\n        that.value = value;\n        caller = (U.isFunction(_col.formatter) ? _col.formatter : this.customFormatter[_col.formatter] || FORMATTER[_col.formatter]);\n        return caller ? caller.call(that) : value;\n      } else {\n        return value;\n      }\n    } else {\n      return \"&nbsp;\";\n    }\n  }\n};\n\nconst getSumFieldValue = function (_list, _col) {\n  let _key = _col.key, _label = _col.label;\n  //, _collector, _formatter\n  if (typeof _key === \"undefined\") {\n    return _label;\n  }\n  else if (_key === \"__d-index__\" || _key === \"__d-checkbox__\") {\n    return '&nbsp;';\n  }\n  else {\n    if (_col.collector) {\n      let that = {\n        key: _key,\n        list: _list\n      };\n      let value = (U.isFunction(_col.collector) ? _col.collector : this.customCollector[_col.collector] || COLLECTOR[_col.collector]).call(that);\n      that.value = value;\n\n      if (_col.formatter) {\n        return (U.isFunction(_col.formatter) ? _col.formatter : this.config.formatter[_col.formatter] || FORMATTER[_col.formatter]).call(that);\n      } else {\n        return value;\n      }\n    } else {\n      return \"&nbsp;\";\n    }\n  }\n};\n\nconst inlineEdit = {\n  active(_focusedColumn, _e, _initValue) {\n    let self = this,\n        dindex, doindex, colIndex, rowIndex, panelName, colspan,\n        col, editor;\n\n    for (var key in _focusedColumn) {\n      panelName = _focusedColumn[key].panelName;\n      dindex = _focusedColumn[key].dindex;\n      doindex = _focusedColumn[key].doindex;\n      colIndex = _focusedColumn[key].colIndex;\n      rowIndex = _focusedColumn[key].rowIndex;\n      colspan = _focusedColumn[key].colspan;\n\n      // 인라인 에디팅을 멈춰야 하는 경우 조건\n      col = this.colGroup[colIndex];\n      if (!(editor = col.editor)) return this;\n\n      // editor disabled 체크\n      if (U.isFunction(editor.disabled)) {\n        if (editor.disabled.call({\n            list: this.list,\n            dindex: dindex,\n            item: this.list[dindex],\n            key: col.key,\n            value: _initValue\n          })) {\n          return this;\n        }\n      }\n\n      // 조건에 맞지 않는 에디팅 타입이면 반응 없음.\n      if (!(function (_editor, _type) {\n          if (_editor.type in INLINE_EDITOR) {\n            return (INLINE_EDITOR[_editor.type].editMode == \"popup\");\n          }\n        })(editor)) {\n        // 체크 박스 타입이면 값 변경 시도\n        if (editor.type == \"checkbox\") {\n          let checked, newValue;\n          if (editor.config && editor.config.trueValue) {\n            if (checked = !(_initValue == editor.config.trueValue)) {\n              newValue = editor.config.trueValue;\n            } else {\n              newValue = editor.config.falseValue;\n            }\n          } else {\n            newValue = checked = (_initValue == false || _initValue == \"false\" || _initValue < \"1\") ? \"true\" : \"false\";\n          }\n\n          DATA.setValue.call(self, dindex, doindex, col.key, newValue);\n          updateRowState.call(self, [\"cellChecked\"], dindex, doindex, {\n            key: col.key, rowIndex: rowIndex, colIndex: colIndex,\n            editorConfig: col.editor.config, checked: checked\n          });\n        }\n        return this;\n      }\n\n      if (this.list[dindex].__isGrouping) {\n        return false;\n      }\n      if (key in this.inlineEditing) {\n        return false;\n      }\n\n      this.inlineEditing[key] = {\n        editor: editor,\n        panelName: panelName,\n        columnKey: key,\n        column: _focusedColumn[key],\n        useReturnToSave: INLINE_EDITOR[editor.type].useReturnToSave\n      };\n      this.isInlineEditing = true;\n    }\n    if (this.isInlineEditing) {\n\n      let originalValue = DATA.getValue.call(self, dindex, doindex, col.key),\n          initValue     = (function (__value, __editor) {\n            if (U.isNothing(__value)) {\n              __value = U.isNothing(originalValue) ? \"\" : originalValue;\n            }\n\n            if (__editor.type == \"money\") {\n              return U.number(__value, {\"money\": true});\n            }\n            else {\n              return __value;\n            }\n          }).call(this, _initValue, editor);\n\n      this.inlineEditing[key].$inlineEditorCell = this.$[\"panel\"][panelName]\n        .find('[data-ax6grid-tr-data-index=\"' + dindex + '\"]')\n        .find('[data-ax6grid-column-rowindex=\"' + rowIndex + '\"][data-ax6grid-column-colindex=\"' + colIndex + '\"]')\n        .find('[data-ax6grid-cellholder]');\n\n      this.inlineEditing[key].$inlineEditor = INLINE_EDITOR[editor.type].init(this, key, editor, this.inlineEditing[key].$inlineEditorCell, initValue);\n\n      return true;\n    }\n  },\n  deActive(_msg, _key, _value) {\n    // console.log(this.inlineEditing.column.dindex, this.inlineEditing.$inlineEditor.val());\n    if (!this.inlineEditing[_key]) return this;\n\n    let panelName   = this.inlineEditing[_key].panelName,\n        dindex      = this.inlineEditing[_key].column.dindex,\n        doindex     = this.inlineEditing[_key].column.doindex,\n        rowIndex    = this.inlineEditing[_key].column.rowIndex,\n        colIndex    = this.inlineEditing[_key].column.colIndex,\n        column      = this.bodyRowMap[this.inlineEditing[_key].column.rowIndex + \"_\" + this.inlineEditing[_key].column.colIndex],\n        editorValue = (function ($inlineEditor) {\n          if (typeof _value === \"undefined\") {\n            if ($inlineEditor.get(0).tagName == \"SELECT\" || $inlineEditor.get(0).tagName == \"INPUT\" || $inlineEditor.get(0).tagName == \"TEXTAREA\") {\n              return $inlineEditor.val();\n            } else {\n              _msg = \"CANCEL\";\n              return false;\n            }\n          } else {\n            return _value;\n          }\n        })(this.inlineEditing[_key].$inlineEditor),\n        newValue    = (function (__value, __editor) {\n          if (__editor.type == \"money\") {\n            return U.number(__value);\n          }\n          else {\n            return __value;\n          }\n        }).call(this, editorValue, column.editor);\n\n    let action = {\n      \"CANCEL\"(_dindex, _column, _newValue) {\n        action[\"__clear\"].call(this);\n      },\n      \"RETURN\"(_dindex, _doindex, _column, _newValue) {\n        if (DATA.setValue.call(this, _dindex, _doindex, _column.key, _newValue)) {\n          action[\"__clear\"].call(this);\n          repaintCell.call(this, panelName, _dindex, _doindex, rowIndex, colIndex, _newValue);\n        } else {\n          action[\"__clear\"].call(this);\n        }\n      },\n      \"__clear\"() {\n        this.isInlineEditing = false;\n        let bindedAx5ui = this.inlineEditing[_key].$inlineEditor.data(\"binded-ax5ui\");\n        if (bindedAx5ui == \"ax5picker\") {\n          this.inlineEditing[_key].$inlineEditor.ax5picker(\"close\");\n        } else if (bindedAx5ui == \"ax5select\") {\n          this.inlineEditing[_key].$inlineEditor.ax5select(\"close\");\n        }\n\n        this.inlineEditing[_key].$inlineEditor.remove();\n        this.inlineEditing[_key].$inlineEditor = null;\n        this.inlineEditing[_key].$inlineEditorCell = null;\n        this.inlineEditing[_key] = undefined;\n        delete this.inlineEditing[_key]; // delete 지원안하는 브라우저 테스트..\n      }\n    };\n\n    if (_msg in action) {\n      action[_msg || \"RETURN\"].call(this, dindex, doindex, column, newValue);\n    } else {\n      action[\"__clear\"].call(this);\n    }\n  },\n  keydown(key, columnKey, _options) {\n    let processor = {\n      \"ESC\"() {\n        for (var columnKey in this.inlineEditing) {\n          inlineEdit.deActive.call(this, \"CANCEL\", columnKey);\n        }\n      },\n      \"RETURN\"() {\n        if (this.isInlineEditing) {\n          if (this.inlineEditing[columnKey] && this.inlineEditing[columnKey].useReturnToSave) { // todo : 네이밍 검증 할 필요있음.\n            inlineEdit.deActive.call(this, \"RETURN\", columnKey);\n          } else {\n            return false;\n          }\n        } else {\n\n          for (var k in this.focusedColumn) {\n            let _column = this.focusedColumn[k],\n                column  = this.bodyRowMap[_column.rowIndex + \"_\" + _column.colIndex],\n                dindex  = _column.dindex,\n                doindex = _column.doindex,\n                value   = \"\",\n                col     = this.colGroup[_column.colIndex];\n\n            if (column) {\n              if (!this.list[dindex].__isGrouping) {\n                value = DATA.getValue.call(this, dindex, doindex, column.key);\n              }\n            }\n\n            if (col.editor && INLINE_EDITOR[col.editor.type].editMode === \"inline\") {\n              if (_options && _options.moveFocus) {\n\n              }\n              else {\n                if (column.editor && column.editor.type == \"checkbox\") {\n                  value = DATA.getValue.call(this, dindex, doindex, column.key);\n\n                  let checked, newValue;\n                  if (column.editor.config && column.editor.config.trueValue) {\n                    // console.log(value, column.editor.config.trueValue);\n\n                    if (value != column.editor.config.trueValue) {\n                      newValue = column.editor.config.trueValue;\n                      checked = true;\n                    } else {\n                      newValue = column.editor.config.falseValue;\n                      checked = false;\n                    }\n                  } else {\n                    newValue = checked = (value == false || value == \"false\" || value < \"1\") ? \"true\" : \"false\";\n                  }\n\n                  DATA.setValue.call(this, dindex, doindex, column.key, newValue);\n                  updateRowState.call(this, [\"cellChecked\"], dindex, doindex, {\n                    key: column.key, rowIndex: _column.rowIndex, colIndex: _column.colIndex,\n                    editorConfig: column.editor.config, checked: checked\n                  });\n                }\n              }\n            } else {\n              inlineEdit.active.call(this, this.focusedColumn, null, value);\n            }\n          }\n        }\n        return true;\n      }\n    };\n\n    if (key in processor) {\n      processor[key].call(this, key, columnKey, _options);\n    }\n  }\n};\n\nconst repaint = function (_reset) {\n  // debugger;\n  let cfg = this.config, list = (this.proxyList) ? this.proxyList : this.list;\n\n  /// repaint reset 타입이면 고정컬럼을 재조정\n  if (_reset) {\n    resetFrozenColumn.call(this);\n    // 틀고정 이 변경되면 출력 시작 인덱스 값을 초기화\n    this.xvar.paintStartRowIndex = undefined;\n    this.xvar.paintStartColumnIndex = undefined;\n  }\n\n  /// 출력시작 인덱스\n  let paintStartRowIndex, virtualPaintStartRowIndex;\n\n  if (this.config.virtualScrollY) {\n    virtualPaintStartRowIndex = paintStartRowIndex = Math.floor(-(this.$.panel[\"body-scroll\"].position().top) / this.xvar.bodyTrHeight) + this.xvar.frozenRowIndex;\n    if (this.xvar.paintRowCountTopMargin < paintStartRowIndex) {\n      paintStartRowIndex -= this.xvar.paintRowCountTopMargin;\n    }\n  }\n  else {\n    paintStartRowIndex = this.xvar.frozenRowIndex;\n  }\n\n  if (isNaN(paintStartRowIndex)) return this;\n\n  let paintStartColumnIndex = 0, paintEndColumnIndex = 0, nopaintLeftColumnsWidth = null, nopaintRightColumnsWidth = null;\n\n  let bodyScrollLeft = -(this.$.panel[\"body-scroll\"].position().left);\n\n  if (this.config.virtualScrollX) { // 페인트 시작컬럼위치와 종료컬럼위치 구하기\n    for (let ci = this.xvar.frozenColumnIndex; ci < this.colGroup.length; ci++) {\n      // bodyScrollLeft\n      this.colGroup[ci]._sx = (ci == this.xvar.frozenColumnIndex) ? 0 : this.colGroup[ci - 1]._ex;\n      this.colGroup[ci]._ex = this.colGroup[ci]._sx + this.colGroup[ci]._width;\n\n      if (this.colGroup[ci]._sx <= bodyScrollLeft && this.colGroup[ci]._ex >= bodyScrollLeft) {\n        paintStartColumnIndex = ci;\n      }\n      if (this.colGroup[ci]._sx <= (bodyScrollLeft + this.xvar.bodyWidth) && this.colGroup[ci]._ex >= (bodyScrollLeft + this.xvar.bodyWidth)) {\n        paintEndColumnIndex = ci;\n\n        if (nopaintLeftColumnsWidth === null) nopaintLeftColumnsWidth = this.colGroup[paintStartColumnIndex]._sx;\n        if (nopaintRightColumnsWidth === null) nopaintRightColumnsWidth = this.xvar.scrollContentWidth - this.colGroup[ci]._ex;\n      }\n    }\n\n    if (nopaintLeftColumnsWidth === null) nopaintLeftColumnsWidth = 0;\n    if (nopaintRightColumnsWidth === null) nopaintRightColumnsWidth = 0;\n    this.$.panel[\"top-body-scroll\"].css({\"padding-left\": nopaintLeftColumnsWidth, \"padding-right\": nopaintRightColumnsWidth});\n    this.$.panel[\"body-scroll\"].css({\"padding-left\": nopaintLeftColumnsWidth, \"padding-right\": nopaintRightColumnsWidth});\n    this.$.panel[\"bottom-body-scroll\"].css({\"padding-left\": nopaintLeftColumnsWidth, \"padding-right\": nopaintRightColumnsWidth});\n  }\n\n  let isFirstPaint          = (typeof this.xvar.paintStartRowIndex === \"undefined\"),\n      headerColGroup        = this.headerColGroup,\n      asideBodyRowData      = this.asideBodyRowData,\n      leftBodyRowData       = this.leftBodyRowData,\n      bodyRowData           = this.bodyRowData,\n      leftFootSumData       = this.leftFootSumData,\n      footSumData           = this.footSumData,\n      asideBodyGroupingData = this.asideBodyGroupingData,\n      leftBodyGroupingData  = this.leftBodyGroupingData,\n      bodyGroupingData      = this.bodyGroupingData,\n      bodyAlign             = cfg.body.align,\n      paintRowCount, virtualPaintRowCount;\n\n  if (!this.config.virtualScrollY) {\n    virtualPaintRowCount = paintRowCount = list.length;\n  } else {\n    virtualPaintRowCount = Math.ceil(this.xvar.bodyHeight / this.xvar.bodyTrHeight);\n    paintRowCount = virtualPaintRowCount + (this.xvar.paintRowCountMargin || 1);\n  }\n\n  // 여유범위 안에 있으면 페인팅 안할수 있게 paintStartRowIndex 변경하지 않음.\n  if (this.xvar.paintRowCountTopMargin < paintStartRowIndex && Math.abs(this.xvar.paintStartRowIndex - paintStartRowIndex) <= this.xvar.paintRowCountTopMargin) {\n    paintStartRowIndex = this.xvar.paintStartRowIndex;\n  }\n\n  if (\n    this.xvar.dataRowCount === list.length\n    && this.xvar.paintStartRowIndex === paintStartRowIndex\n    && this.xvar.paintRowCount === paintRowCount\n    && this.xvar.paintStartColumnIndex === paintStartColumnIndex\n    && this.xvar.paintEndColumnIndex === paintEndColumnIndex\n  ) return this; // 스크롤 포지션 변경 여부에 따라 프로세스 진행여부 결정\n\n  // bodyRowData 수정 : 페인트 컬럼 포지션이 달라지므로\n  if (nopaintLeftColumnsWidth || nopaintRightColumnsWidth) {\n    headerColGroup = [].concat(headerColGroup).splice(paintStartColumnIndex - this.xvar.frozenColumnIndex, paintEndColumnIndex - paintStartColumnIndex + 1 + this.xvar.frozenColumnIndex);\n    bodyRowData = UTIL.getTableByStartEndColumnIndex(bodyRowData, paintStartColumnIndex, paintEndColumnIndex);\n\n    if (cfg.body.grouping) {\n      bodyGroupingData = UTIL.getTableByStartEndColumnIndex(bodyGroupingData, paintStartColumnIndex, paintEndColumnIndex);\n    }\n    if (cfg.footSum) {\n      footSumData = UTIL.getTableByStartEndColumnIndex(footSumData, paintStartColumnIndex, paintEndColumnIndex);\n    }\n    if (this.xvar.paintStartColumnIndex !== paintStartColumnIndex || this.xvar.paintEndColumnIndex !== paintEndColumnIndex) {\n      this.needToPaintSum = true;\n    }\n  }\n\n  /// 스크롤 컨텐츠의 높이 : 그리드 스크롤의 실제 크기와는 관계 없이 데이터 갯수에 따라 스크롤 컨텐츠 높이값 구해서 저장해두기.\n  this.xvar.scrollContentHeight = this.xvar.bodyTrHeight * (list.length - this.xvar.frozenRowIndex);\n  if (this.xvar.scrollContentHeight < 0) this.xvar.scrollContentHeight = 0;\n\n  /// 사용된 패널들의 키 모음\n  this.$.livePanelKeys = [];\n\n  // 그리드 바디 영역 페인트 함수\n  /**\n   * @param _elTargetKey\n   * @param _colGroup\n   * @param _bodyRow\n   * @param _groupRow\n   * @param _list\n   * @param [_scrollConfig]\n   * @returns {boolean}\n   */\n  let repaintBody = function (_elTargetKey, _colGroup, _bodyRow, _groupRow, _list, _scrollConfig) {\n    let _elTarget = this.$.panel[_elTargetKey];\n\n    if (!isFirstPaint && !_scrollConfig) {\n      this.$.livePanelKeys.push(_elTargetKey); // 사용중인 패널키를 모아둠. (뷰의 상태 변경시 사용하려고)\n      return false;\n    }\n\n    let SS           = [],\n        cgi, cgl, di, dl, tri, trl, ci, cl, col,\n        cellHeight,\n        colAlign,\n        isScrolled   = (function () {\n          // 스크롤값이 변경되거나 처음 호출되었습니까?\n          if (typeof _scrollConfig === \"undefined\" || typeof _scrollConfig['paintStartRowIndex'] === \"undefined\") {\n            _scrollConfig = {\n              paintStartRowIndex: 0,\n              paintRowCount: _list.length\n            };\n            return false;\n          } else {\n            return true;\n          }\n        })(),\n        stripeString = '#fff 0px, #fff ' + (cfg.body.columnHeight - cfg.body.columnBorderWidth) + 'px, #eee ' + (cfg.body.columnHeight - cfg.body.columnBorderWidth) + 'px, #eee ' + (cfg.body.columnHeight) + 'px';\n\n    if (isScrolled) {\n      SS.push('<div style=\"background:repeating-linear-gradient(to top, ' + stripeString + ');' +\n        'font-size:0;' +\n        'line-height:0;height: ' + (_scrollConfig.paintStartRowIndex - this.xvar.frozenRowIndex) * _scrollConfig.bodyTrHeight + 'px;\"></div>');\n    }\n\n    SS.push('<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">');\n    SS.push('<colgroup>');\n    for (cgi = 0, cgl = _colGroup.length; cgi < cgl; cgi++) {\n      SS.push('<col style=\"width:' + _colGroup[cgi]._width + 'px;\"  />');\n    }\n    SS.push('<col  />');\n    SS.push('</colgroup>');\n\n    di = _scrollConfig.paintStartRowIndex;\n\n    for (dl = (function () {\n      let len;\n      len = _list.length;\n      if (_scrollConfig.paintRowCount + _scrollConfig.paintStartRowIndex < len) {\n        len = _scrollConfig.paintRowCount + _scrollConfig.paintStartRowIndex;\n      }\n      return len;\n    })(); di < dl; di++) {\n\n      if (_list[di]) {\n        let isGroupingRow = false, rowTable, odi = (typeof _list[di].__origin_index__ !== \"undefined\") ? _list[di].__origin_index__ : di;\n        if (_groupRow && \"__isGrouping\" in _list[di]) {\n          rowTable = _groupRow;\n          isGroupingRow = true;\n        } else {\n          rowTable = _bodyRow;\n        }\n\n        for (tri = 0, trl = rowTable.rows.length; tri < trl; tri++) {\n\n          SS.push('<tr class=\"tr-' + (di % 4) + '', (cfg.body.trStyleClass) ? (U.isFunction(cfg.body.trStyleClass)) ? ' ' + cfg.body.trStyleClass.call({\n              item: _list[di],\n              index: di\n            }, _list[di], di) : ' ' + cfg.body.trStyleClass : '', '\"',\n\n            (isGroupingRow) ? ' data-ax6grid-grouping-tr=\"true\"' : '',\n            ' data-ax6grid-tr-data-index=\"' + di + '\"',\n            ' data-ax6grid-tr-data-o-index=\"' + odi + '\"',\n            ' data-ax6grid-selected=\"' + (_list[di][cfg.columnKeys.selected] || \"false\") + '\"',\n            ' data-ax6grid-disable-selection=\"' + (_list[di][cfg.columnKeys.disableSelection] || \"false\") + '\"',\n            '>');\n          for (ci = 0, cl = rowTable.rows[tri].cols.length; ci < cl; ci++) {\n            col = rowTable.rows[tri].cols[ci];\n            cellHeight = cfg.body.columnHeight * col.rowspan - cfg.body.columnBorderWidth;\n            colAlign = col.align || bodyAlign;\n\n            SS.push('<td ',\n              'data-ax6grid-panel-name=\"' + _elTargetKey + '\" ',\n              'data-ax6grid-data-index=\"' + di + '\" ',\n              'data-ax6grid-data-o-index=\"' + odi + '\" ',\n              'data-ax6grid-column-row=\"' + tri + '\" ',\n              'data-ax6grid-column-col=\"' + ci + '\" ',\n              'data-ax6grid-column-rowIndex=\"' + col.rowIndex + '\" ',\n              'data-ax6grid-column-colIndex=\"' + col.colIndex + '\" ',\n              'data-ax6grid-column-attr=\"' + (col.columnAttr || \"default\") + '\" ',\n              (function (_focusedColumn, _selectedColumn) {\n                let attrs = \"\";\n                if (_focusedColumn) {\n                  attrs += 'data-ax6grid-column-focused=\"true\" ';\n                }\n                if (_selectedColumn) {\n                  attrs += 'data-ax6grid-column-selected=\"true\" ';\n                }\n                return attrs;\n              })(this.focusedColumn[di + \"_\" + col.colIndex + \"_\" + col.rowIndex], this.selectedColumn[di + \"_\" + col.colIndex + \"_\" + col.rowIndex]),\n              'colspan=\"' + col.colspan + '\" ',\n              'rowspan=\"' + col.rowspan + '\" ',\n              'class=\"' + (function (_col) {\n                let tdCSS_class = \"\";\n                if (_col.styleClass) {\n                  if (U.isFunction(_col.styleClass)) {\n                    tdCSS_class += _col.styleClass.call({\n                      column: _col,\n                      key: _col.key,\n                      item: _list[di],\n                      index: di\n                    }) + \" \";\n                  } else {\n                    tdCSS_class += _col.styleClass + \" \";\n                  }\n                }\n                if (cfg.body.columnBorderWidth) tdCSS_class += \"hasBorder \";\n                if (ci == cl - 1) tdCSS_class += \"isLastColumn \";\n                return tdCSS_class;\n              }).call(this, col) + '\" ',\n              'style=\"height: ' + cellHeight + 'px;min-height: 1px;\">');\n\n            SS.push((function (_cellHeight) {\n              let lineHeight = (cfg.body.columnHeight - cfg.body.columnPadding * 2 - cfg.body.columnBorderWidth);\n              if (!col.multiLine) {\n                _cellHeight = cfg.body.columnHeight - cfg.body.columnBorderWidth;\n              }\n\n              return '<span data-ax6grid-cellHolder=\"' + ((col.multiLine) ? 'multiLine' : '') + '\" ' +\n                ((colAlign) ? 'data-ax6grid-text-align=\"' + colAlign + '\"' : '') +\n                '\" style=\"height:' + _cellHeight + 'px;' + ((col.multiLine) ? '' : 'line-height: ' + lineHeight + 'px;') + '\">';\n\n            })(cellHeight), (isGroupingRow) ? getGroupingValue.call(this, _list[di], di, col) : getFieldValue.call(this, _list, _list[di], di, col), '</span>');\n\n            SS.push('</td>');\n          }\n          SS.push('<td ',\n            'data-ax6grid-column-row=\"null\" ',\n            'data-ax6grid-column-col=\"null\" ',\n            'data-ax6grid-data-index=\"' + di + '\" ',\n            'data-ax6grid-data-o-index=\"' + odi + '\" ',\n            'data-ax6grid-column-attr=\"' + (\"default\") + '\" ',\n            'style=\"height: ' + (cfg.body.columnHeight) + 'px;min-height: 1px;\" ',\n            '></td>');\n          SS.push('</tr>');\n        }\n      }\n    }\n    SS.push('</table>');\n\n    if (isScrolled && _list.length) {\n      SS.push('<div style=\"background:repeating-linear-gradient(to bottom, ' + stripeString + ');' +\n        'font-size:0;' +\n        'line-height:0;height: ' + (_list.length - di) * _scrollConfig.bodyTrHeight + 'px;\"></div>');\n    }\n\n\n    _elTarget.empty();\n    SS = SS.join('');\n\n    _elTarget.get(0).innerHTML = SS;\n\n    this.$.livePanelKeys.push(_elTargetKey); // 사용중인 패널키를 모아둠. (뷰의 상태 변경시 사용하려고)\n    return true;\n  };\n\n  /**\n   * @param _elTargetKey\n   * @param _colGroup\n   * @param _bodyRow\n   * @param _list\n   * @param [_scrollConfig]\n   * @returns {boolean}\n   */\n  let repaintSum = function (_elTargetKey, _colGroup, _bodyRow, _list, _scrollConfig) {\n    let _elTarget = this.$.panel[_elTargetKey];\n\n    if (!isFirstPaint && !_scrollConfig) {\n      this.$.livePanelKeys.push(_elTargetKey); // 사용중인 패널키를 모아둠. (뷰의 상태 변경시 사용하려고)\n      return false;\n    }\n\n    let SS = [], cgi, cgl, tri, trl, ci, cl, col, cellHeight, colAlign;\n\n    SS.push('<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">');\n    SS.push('<colgroup>');\n    for (cgi = 0, cgl = _colGroup.length; cgi < cgl; cgi++) {\n      SS.push('<col style=\"width:' + _colGroup[cgi]._width + 'px;\"  />');\n    }\n    SS.push('<col  />');\n    SS.push('</colgroup>');\n\n    for (tri = 0, trl = _bodyRow.rows.length; tri < trl; tri++) {\n      SS.push('<tr class=\"tr-sum\">');\n      for (ci = 0, cl = _bodyRow.rows[tri].cols.length; ci < cl; ci++) {\n        col = _bodyRow.rows[tri].cols[ci];\n        cellHeight = cfg.body.columnHeight * col.rowspan - cfg.body.columnBorderWidth;\n        colAlign = col.align || bodyAlign;\n\n        SS.push('<td ',\n          'data-ax6grid-panel-name=\"' + _elTargetKey + '\" ',\n          'data-ax6grid-column-row=\"' + tri + '\" ',\n          'data-ax6grid-column-col=\"' + ci + '\" ',\n          'data-ax6grid-column-rowIndex=\"' + tri + '\" ',\n          'data-ax6grid-column-colIndex=\"' + col.colIndex + '\" ',\n          'data-ax6grid-column-attr=\"' + (col.columnAttr || \"sum\") + '\" ',\n          (function (_focusedColumn, _selectedColumn) {\n            var attrs = \"\";\n            if (_focusedColumn) {\n              attrs += 'data-ax6grid-column-focused=\"true\" ';\n            }\n            if (_selectedColumn) {\n              attrs += 'data-ax6grid-column-selected=\"true\" ';\n            }\n            return attrs;\n          })(this.focusedColumn[\"sum_\" + col.colIndex + \"_\" + tri], this.selectedColumn[\"sum_\" + col.colIndex + \"_\" + tri]),\n          'colspan=\"' + col.colspan + '\" ',\n          'rowspan=\"' + col.rowspan + '\" ',\n          'class=\"' + (function (_col) {\n            var tdCSS_class = \"\";\n            if (_col.styleClass) {\n              if (U.isFunction(_col.styleClass)) {\n                tdCSS_class += _col.styleClass.call({\n                  column: _col,\n                  key: _col.key,\n                  isFootSum: true\n                }) + \" \";\n              } else {\n                tdCSS_class += _col.styleClass + \" \";\n              }\n            }\n            if (cfg.body.columnBorderWidth) tdCSS_class += \"hasBorder \";\n            if (ci == cl - 1) tdCSS_class += \"isLastColumn \";\n            return tdCSS_class;\n          }).call(this, col) + '\" ',\n          'style=\"height: ' + cellHeight + 'px;min-height: 1px;\">');\n\n        SS.push((function (_cellHeight) {\n          let lineHeight = (cfg.body.columnHeight - cfg.body.columnPadding * 2 - cfg.body.columnBorderWidth);\n          if (!col.multiLine) {\n            _cellHeight = cfg.body.columnHeight - cfg.body.columnBorderWidth;\n          }\n\n          return '<span data-ax6grid-cellHolder=\"' + ((col.multiLine) ? 'multiLine' : '') + '\" ' +\n            ((colAlign) ? 'data-ax6grid-text-align=\"' + colAlign + '\"' : '') +\n            '\" style=\"height:' + _cellHeight + 'px;' + ((col.multiLine) ? '' : 'line-height: ' + lineHeight + 'px;') + '\">';\n\n        })(cellHeight), getSumFieldValue.call(this, _list, col), '</span>');\n\n        SS.push('</td>');\n      }\n      SS.push('<td ',\n        'data-ax6grid-column-row=\"null\" ',\n        'data-ax6grid-column-col=\"null\" ',\n        'data-ax6grid-column-attr=\"' + (\"sum\") + '\" ',\n        'style=\"height: ' + (cfg.body.columnHeight) + 'px;min-height: 1px;\" ',\n        '></td>');\n      SS.push('</tr>');\n    }\n\n    SS.push('</table>');\n\n    _elTarget.empty();\n    SS = SS.join('');\n\n    _elTarget.get(0).innerHTML = SS;\n\n    this.$.livePanelKeys.push(_elTargetKey); // 사용중인 패널키를 모아둠. (뷰의 상태 변경시 사용하려고)\n    return true;\n  };\n\n  /**\n   * @param _elTargetKey\n   * @param _colGroup\n   * @param _bodyRow\n   * @param _list\n   * @param [_scrollConfig]\n   * @returns {boolean}\n   */\n  let mergeCellsBody = function (_elTargetKey, _colGroup, _bodyRow, _list, _scrollConfig) {\n    let tblRowMaps = [];\n    let _elTarget = this.$.panel[_elTargetKey];\n    let token = {}, hasMergeTd;\n\n    // 테이블의 td들을 수잡하여 저장해두고 스크립트로 반복하여 정리.\n    let tableTrs = _elTarget.find(\"tr\");\n    for (let ri = 0, rl = tableTrs.length; ri < rl; ri++) {\n      let tableTrTds, trMaps;\n      tableTrTds = tableTrs[ri].childNodes;\n      trMaps = [];\n\n      for (let ci = 0, cl = tableTrTds.length; ci < cl; ci++) {\n        let tdObj = {\n          \"$\": jQuery(tableTrTds[ci])\n        };\n\n        if (tdObj[\"$\"].attr(\"data-ax6grid-column-col\") != \"null\") {\n          tdObj.dindex = tdObj[\"$\"].attr(\"data-ax6grid-data-index\");\n          tdObj.tri = tdObj[\"$\"].attr(\"data-ax6grid-column-row\");\n          tdObj.ci = tdObj[\"$\"].attr(\"data-ax6grid-column-col\");\n          tdObj.rowIndex = tdObj[\"$\"].attr(\"data-ax6grid-column-rowIndex\");\n          tdObj.colIndex = tdObj[\"$\"].attr(\"data-ax6grid-column-colIndex\");\n          tdObj.rowspan = tdObj[\"$\"].attr(\"rowspan\");\n          tdObj.text = tdObj[\"$\"].text();\n          trMaps.push(tdObj);\n        }\n\n        tdObj = null;\n      }\n      tblRowMaps.push(trMaps);\n    }\n\n    // 두줄이상 일 때 의미가 있으니.\n    if (tblRowMaps.length > 1) {\n      hasMergeTd = false;\n      for (let ri = 0, rl = tblRowMaps.length; ri < rl; ri++) {\n        let prevTokenColIndexs = [];\n\n        for (let ci = 0, cl = tblRowMaps[ri].length; ci < cl; ci++) {\n          // 적용 하려는 컬럼에 editor 속성이 없다면 머지 대상입니다.\n\n          if (!_colGroup[ci].editor && (() => {\n              if (U.isArray(cfg.body.mergeCells)) {\n                return U.search(cfg.body.mergeCells, _colGroup[ci].key) > -1;\n              } else {\n                return true;\n              }\n            })()) {\n\n            // 앞줄과 값이 같다면.\n            if (token[ci] && (() => {\n                if (prevTokenColIndexs.length > 0) {\n                  let hasFalse = true;\n                  prevTokenColIndexs.forEach(function (ti) {\n                    if (tblRowMaps[ri - 1][ti].text != tblRowMaps[ri][ti].text) {\n                      hasFalse = false;\n                    }\n                  });\n                  return hasFalse;\n                } else {\n                  return true;\n                }\n              })() && token[ci].text == tblRowMaps[ri][ci].text) {\n              tblRowMaps[ri][ci].rowspan = 0;\n              tblRowMaps[token[ci].ri][ci].rowspan++;\n              hasMergeTd = true;\n            } else {\n              token[ci] = {\n                ri: ri,\n                ci: ci,\n                text: tblRowMaps[ri][ci].text\n              };\n            }\n\n            prevTokenColIndexs.push(ci);\n          }\n        }\n      }\n\n      // rowspan을 다 구했으면 적용합니다.\n      if (hasMergeTd) {\n        for (let ri = 0, rl = tblRowMaps.length; ri < rl; ri++) {\n          for (let ci = 0, cl = tblRowMaps[ri].length; ci < cl; ci++) {\n            if (tblRowMaps[ri][ci].rowspan == 0) {\n              tblRowMaps[ri][ci][\"$\"].remove();\n            } else if (tblRowMaps[ri][ci].rowspan > 1) {\n              tblRowMaps[ri][ci][\"$\"]\n                .attr(\"rowspan\", tblRowMaps[ri][ci].rowspan)\n                .addClass(\"merged\");\n            }\n          }\n        }\n      }\n    }\n  };\n\n  let scrollConfig = {\n    paintStartRowIndex: paintStartRowIndex,\n    paintRowCount: paintRowCount,\n    paintStartColumnIndex: paintStartColumnIndex,\n    paintEndColumnIndex: paintEndColumnIndex,\n    nopaintLeftColumnsWidth: nopaintLeftColumnsWidth,\n    nopaintRightColumnsWidth: nopaintRightColumnsWidth,\n    bodyTrHeight: this.xvar.bodyTrHeight,\n    virtualScrollX: this.config.virtualScrollX,\n    virtualScrollY: this.config.virtualScrollY,\n  };\n  let frozenScrollConfig = jQuery.extend({}, scrollConfig, {\n    paintStartRowIndex: 0,\n    paintRowCount: this.xvar.frozenRowIndex\n  });\n\n  // aside\n  if (cfg.asidePanelWidth > 0) {\n    if (this.xvar.frozenRowIndex > 0) {\n      // 상단 행고정\n      repaintBody.call(this, \"top-aside-body\", this.asideColGroup, asideBodyRowData, asideBodyGroupingData, list.slice(0, this.xvar.frozenRowIndex), frozenScrollConfig);\n    }\n\n    repaintBody.call(this, \"aside-body-scroll\", this.asideColGroup, asideBodyRowData, asideBodyGroupingData, list, scrollConfig);\n\n    if (cfg.footSum) {\n      // 바닥 요약 (footSum에 대한 aside 사용안함)\n      repaintSum.call(this, \"bottom-aside-body\", this.asideColGroup, asideBodyRowData, null, list);\n    }\n  }\n\n  // left\n  if (this.xvar.frozenColumnIndex > 0) {\n    if (this.xvar.frozenRowIndex > 0) {\n      // 상단 행고정\n      repaintBody.call(this, \"top-left-body\", this.leftHeaderColGroup, leftBodyRowData, leftBodyGroupingData, list.slice(0, this.xvar.frozenRowIndex), frozenScrollConfig);\n    }\n\n    repaintBody.call(this, \"left-body-scroll\", this.leftHeaderColGroup, leftBodyRowData, leftBodyGroupingData, list, scrollConfig);\n\n    if (cfg.footSum && this.needToPaintSum) {\n      // 바닥 요약\n      repaintSum.call(this, \"bottom-left-body\", this.leftHeaderColGroup, leftFootSumData, list);\n    }\n  }\n\n  // body\n  if (this.xvar.frozenRowIndex > 0) {\n    // 상단 행고정\n    repaintBody.call(this, \"top-body-scroll\", headerColGroup, bodyRowData, bodyGroupingData, list.slice(0, this.xvar.frozenRowIndex), frozenScrollConfig);\n  }\n  repaintBody.call(this, \"body-scroll\", headerColGroup, bodyRowData, bodyGroupingData, list, scrollConfig);\n\n  // 바닥 요약\n  if (cfg.footSum && this.needToPaintSum) {\n    repaintSum.call(this, \"bottom-body-scroll\", headerColGroup, footSumData, list, scrollConfig);\n  }\n  // right\n  if (cfg.rightSum) {\n    // todo : right 표현 정리\n  }\n\n  /// mergeCells\n  if (cfg.body.mergeCells && list.length) {\n    // left\n    if (this.xvar.frozenColumnIndex > 0) {\n      if (this.xvar.frozenRowIndex > 0) { // 상단 행고정\n        // console.log(this.leftHeaderColGroup, leftBodyRowData);\n        mergeCellsBody.call(this, \"top-left-body\", this.leftHeaderColGroup, leftBodyRowData, list.slice(0, this.xvar.frozenRowIndex));\n      }\n      mergeCellsBody.call(this, \"left-body-scroll\", this.leftHeaderColGroup, leftBodyRowData, list, scrollConfig);\n    }\n\n    // body\n    if (this.xvar.frozenRowIndex > 0) { // 상단 행고정\n      mergeCellsBody.call(this, \"top-body-scroll\", this.headerColGroup, bodyRowData, list.slice(0, this.xvar.frozenRowIndex));\n    }\n    mergeCellsBody.call(this, \"body-scroll\", this.headerColGroup, bodyRowData, list, scrollConfig);\n  }\n\n  this.xvar.virtualPaintStartRowIndex = virtualPaintStartRowIndex;\n  this.xvar.paintStartRowIndex = paintStartRowIndex;\n  this.xvar.paintRowCount = paintRowCount;\n  this.xvar.virtualPaintRowCount = virtualPaintRowCount;\n  this.xvar.paintStartColumnIndex = paintStartColumnIndex;\n  this.xvar.paintEndColumnIndex = paintEndColumnIndex;\n  this.xvar.nopaintLeftColumnsWidth = nopaintLeftColumnsWidth;\n  this.xvar.nopaintRightColumnsWidth = nopaintRightColumnsWidth;\n  this.xvar.dataRowCount = list.length;\n  this.needToPaintSum = false;\n\n  PAGE.statusUpdate.call(this);\n};\n\nconst repaintCell = function (_panelName, _dindex, _doindex, _rowIndex, _colIndex, _newValue) {\n  let self = this,\n      cfg  = this.config,\n      list = this.list;\n\n  let updateCell = this.$[\"panel\"][_panelName]\n    .find('[data-ax6grid-tr-data-index=\"' + _dindex + '\"]')\n    .find('[data-ax6grid-column-rowindex=\"' + _rowIndex + '\"][data-ax6grid-column-colindex=\"' + _colIndex + '\"]')\n    .find('[data-ax6grid-cellholder]'),\n      colGroup   = this.colGroup,\n      col        = colGroup[_colIndex];\n\n  updateCell.html(getFieldValue.call(this, list, list[_dindex], _dindex, col));\n\n  if (col.editor && col.editor.updateWith) {\n    col.editor.updateWith.forEach(function (updateColumnKey) {\n      colGroup.forEach(function (col) {\n        if (col.key == updateColumnKey) {\n          let rowIndex = col.rowIndex, colIndex = col.colIndex,\n              panelName                         = UTIL.findPanelByColumnIndex.call(self, _dindex, colIndex, rowIndex).panelName,\n              updateWithCell                    = self.$[\"panel\"][panelName]\n                .find('[data-ax6grid-tr-data-index=\"' + _dindex + '\"]')\n                .find('[data-ax6grid-column-rowindex=\"' + rowIndex + '\"][data-ax6grid-column-colindex=\"' + colIndex + '\"]')\n                .find('[data-ax6grid-cellholder]');\n\n          updateWithCell.html(getFieldValue.call(self, list, list[_dindex], _dindex, col));\n        }\n      });\n    });\n  }\n\n  /// ~~~~~~\n\n  let paintStartRowIndex   = Math.floor(Math.abs(this.$.panel[\"body-scroll\"].position().top) / this.xvar.bodyTrHeight) + this.xvar.frozenRowIndex,\n      headerColGroup       = this.headerColGroup,\n      leftFootSumData      = this.leftFootSumData,\n      footSumData          = this.footSumData,\n      leftBodyGroupingData = this.leftBodyGroupingData,\n      bodyGroupingData     = this.bodyGroupingData,\n      bodyAlign            = cfg.body.align,\n      paintRowCount        = Math.ceil(this.$.panel[\"body\"].height() / this.xvar.bodyTrHeight) + 1,\n      scrollConfig         = {\n        paintStartRowIndex: paintStartRowIndex,\n        paintRowCount: paintRowCount,\n        bodyTrHeight: this.xvar.bodyTrHeight\n      };\n\n  if (this.xvar.nopaintLeftColumnsWidth || this.xvar.nopaintRightColumnsWidth) {\n    headerColGroup = [].concat(headerColGroup).splice(this.xvar.paintStartColumnIndex, this.xvar.paintEndColumnIndex - this.xvar.paintStartColumnIndex + 1);\n    if (cfg.body.grouping) {\n      bodyGroupingData = UTIL.getTableByStartEndColumnIndex(bodyGroupingData, this.xvar.paintStartColumnIndex, this.xvar.paintEndColumnIndex);\n    }\n    if (cfg.footSum) {\n      footSumData = UTIL.getTableByStartEndColumnIndex(footSumData, this.xvar.paintStartColumnIndex, this.xvar.paintEndColumnIndex);\n    }\n  }\n\n  let repaintSum = function (_elTargetKey, _colGroup, _bodyRow, _list, _scrollConfig) {\n    let _elTarget = this.$.panel[_elTargetKey],\n        SS        = [],\n        cgi, cgl, tri, trl, ci, cl, col, cellHeight, colAlign;\n\n    SS.push('<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">');\n    SS.push('<colgroup>');\n    for (cgi = 0, cgl = _colGroup.length; cgi < cgl; cgi++) {\n      SS.push('<col style=\"width:' + _colGroup[cgi]._width + 'px;\"  />');\n    }\n    SS.push('<col  />');\n    SS.push('</colgroup>');\n\n    for (tri = 0, trl = _bodyRow.rows.length; tri < trl; tri++) {\n      SS.push('<tr class=\"tr-sum\">');\n      for (ci = 0, cl = _bodyRow.rows[tri].cols.length; ci < cl; ci++) {\n        col = _bodyRow.rows[tri].cols[ci];\n        cellHeight = cfg.body.columnHeight * col.rowspan - cfg.body.columnBorderWidth;\n        colAlign = col.align || bodyAlign;\n\n        SS.push('<td ',\n          'data-ax6grid-panel-name=\"' + _elTargetKey + '\" ',\n          'data-ax6grid-column-row=\"' + tri + '\" ',\n          'data-ax6grid-column-col=\"' + ci + '\" ',\n          'data-ax6grid-column-rowIndex=\"' + tri + '\" ',\n          'data-ax6grid-column-colIndex=\"' + col.colIndex + '\" ',\n          'data-ax6grid-column-attr=\"' + (col.columnAttr || \"sum\") + '\" ',\n          (function (_focusedColumn, _selectedColumn) {\n            var attrs = \"\";\n            if (_focusedColumn) {\n              attrs += 'data-ax6grid-column-focused=\"true\" ';\n            }\n            if (_selectedColumn) {\n              attrs += 'data-ax6grid-column-selected=\"true\" ';\n            }\n            return attrs;\n          })(this.focusedColumn[\"sum_\" + col.colIndex + \"_\" + tri], this.selectedColumn[\"sum_\" + col.colIndex + \"_\" + tri]),\n          'colspan=\"' + col.colspan + '\" ',\n          'rowspan=\"' + col.rowspan + '\" ',\n          'class=\"' + (function (_col) {\n            let tdCSS_class = \"\";\n            if (_col.styleClass) {\n              if (U.isFunction(_col.styleClass)) {\n                tdCSS_class += _col.styleClass.call({\n                  column: _col,\n                  key: _col.key,\n                  isFootSum: true\n                }) + \" \";\n              } else {\n                tdCSS_class += _col.styleClass + \" \";\n              }\n            }\n            if (cfg.body.columnBorderWidth) tdCSS_class += \"hasBorder \";\n            if (ci == cl - 1) tdCSS_class += \"isLastColumn \";\n            return tdCSS_class;\n          }).call(this, col) + '\" ',\n          'style=\"height: ' + cellHeight + 'px;min-height: 1px;\">');\n\n        SS.push((function (_cellHeight) {\n          let lineHeight = (cfg.body.columnHeight - cfg.body.columnPadding * 2 - cfg.body.columnBorderWidth);\n          if (!col.multiLine) {\n            _cellHeight = cfg.body.columnHeight - cfg.body.columnBorderWidth;\n          }\n\n          return '<span data-ax6grid-cellHolder=\"' + ((col.multiLine) ? 'multiLine' : '') + '\" ' +\n            ((colAlign) ? 'data-ax6grid-text-align=\"' + colAlign + '\"' : '') +\n            '\" style=\"height:' + _cellHeight + 'px;' + ((col.multiLine) ? '' : 'line-height: ' + lineHeight + 'px;') + '\">';\n\n        })(cellHeight), getSumFieldValue.call(this, _list, col), '</span>');\n\n        SS.push('</td>');\n      }\n      SS.push('<td ',\n        'data-ax6grid-column-row=\"null\" ',\n        'data-ax6grid-column-col=\"null\" ',\n        'data-ax6grid-column-attr=\"' + (\"sum\") + '\" ',\n        'style=\"height: ' + (cfg.body.columnHeight) + 'px;min-height: 1px;\" ',\n        '></td>');\n      SS.push('</tr>');\n    }\n\n    SS.push('</table>');\n\n    _elTarget.empty().get(0).innerHTML = SS.join('');\n    return true;\n  };\n  let replaceGroupTr = function (_elTargetKey, _colGroup, _groupRow, _list, _scrollConfig) {\n    let _elTarget = this.$.panel[_elTargetKey],\n        SS        = [],\n        di, dl, tri, trl, ci, cl,\n        col, cellHeight, colAlign;\n\n    for (di = _scrollConfig.paintStartRowIndex, dl = (function () {\n      let len;\n      len = _list.length;\n      if (_scrollConfig.paintRowCount + _scrollConfig.paintStartRowIndex < len) {\n        len = _scrollConfig.paintRowCount + _scrollConfig.paintStartRowIndex;\n      }\n      return len;\n    })(); di < dl; di++) {\n      if (_list[di] && _groupRow && \"__isGrouping\" in _list[di]) {\n        let rowTable = _groupRow;\n        SS = [];\n        for (tri = 0, trl = rowTable.rows.length; tri < trl; tri++) {\n          for (ci = 0, cl = rowTable.rows[tri].cols.length; ci < cl; ci++) {\n            col = rowTable.rows[tri].cols[ci];\n            cellHeight = cfg.body.columnHeight * col.rowspan - cfg.body.columnBorderWidth;\n            colAlign = col.align || bodyAlign;\n\n            SS.push('<td ',\n              'data-ax6grid-panel-name=\"' + _elTargetKey + '\" ',\n              'data-ax6grid-data-index=\"' + di + '\" ',\n              'data-ax6grid-column-row=\"' + tri + '\" ',\n              'data-ax6grid-column-col=\"' + ci + '\" ',\n              'data-ax6grid-column-rowIndex=\"' + col.rowIndex + '\" ',\n              'data-ax6grid-column-colIndex=\"' + col.colIndex + '\" ',\n              'data-ax6grid-column-attr=\"' + (col.columnAttr || \"default\") + '\" ',\n              (function (_focusedColumn, _selectedColumn) {\n                let attrs = \"\";\n                if (_focusedColumn) {\n                  attrs += 'data-ax6grid-column-focused=\"true\" ';\n                }\n                if (_selectedColumn) {\n                  attrs += 'data-ax6grid-column-selected=\"true\" ';\n                }\n                return attrs;\n              })(this.focusedColumn[di + \"_\" + col.colIndex + \"_\" + col.rowIndex], this.selectedColumn[di + \"_\" + col.colIndex + \"_\" + col.rowIndex]),\n              'colspan=\"' + col.colspan + '\" ',\n              'rowspan=\"' + col.rowspan + '\" ',\n              'class=\"' + (function (_col) {\n                let tdCSS_class = \"\";\n                if (_col.styleClass) {\n                  if (U.isFunction(_col.styleClass)) {\n                    tdCSS_class += _col.styleClass.call({\n                      column: _col,\n                      key: _col.key,\n                      item: _list[di],\n                      index: di\n                    }) + \" \";\n                  } else {\n                    tdCSS_class += _col.styleClass + \" \";\n                  }\n                }\n                if (cfg.body.columnBorderWidth) tdCSS_class += \"hasBorder \";\n                if (ci == cl - 1) tdCSS_class += \"isLastColumn \";\n                return tdCSS_class;\n              }).call(this, col) + '\" ',\n              'style=\"height: ' + cellHeight + 'px;min-height: 1px;\">');\n\n            SS.push((function (_cellHeight) {\n              let lineHeight = (cfg.body.columnHeight - cfg.body.columnPadding * 2 - cfg.body.columnBorderWidth);\n              if (!col.multiLine) {\n                _cellHeight = cfg.body.columnHeight - cfg.body.columnBorderWidth;\n              }\n\n              return '<span data-ax6grid-cellHolder=\"' + ((col.multiLine) ? 'multiLine' : '') + '\" ' +\n                ((colAlign) ? 'data-ax6grid-text-align=\"' + colAlign + '\"' : '') +\n                '\" style=\"height:' + _cellHeight + 'px;' + ((col.multiLine) ? '' : 'line-height: ' + lineHeight + 'px;') + '\">';\n\n            })(cellHeight), getGroupingValue.call(this, _list[di], di, col), '</span>');\n\n            SS.push('</td>');\n          }\n          SS.push('<td ',\n            'data-ax6grid-column-row=\"null\" ',\n            'data-ax6grid-column-col=\"null\" ',\n            'data-ax6grid-data-index=\"' + di + '\" ',\n            'data-ax6grid-column-attr=\"' + (\"default\") + '\" ',\n            'style=\"height: ' + (cfg.body.columnHeight) + 'px;min-height: 1px;\" ',\n            '></td>');\n        }\n        _elTarget.find('tr[data-ax6grid-tr-data-index=\"' + di + '\"]').empty().get(0).innerHTML = SS.join('');\n      }\n    }\n  };\n\n  // body.grouping tr 다시 그리기..\n  if (cfg.body.grouping) {\n    // left\n    if (this.xvar.frozenColumnIndex > 0) {\n      if (this.xvar.frozenRowIndex > 0) {\n        // 상단 행고정\n        replaceGroupTr.call(this, \"top-left-body\", headerColGroup, leftBodyGroupingData, list.slice(0, this.xvar.frozenRowIndex), {\n          paintStartRowIndex: 0,\n          paintRowCount: this.xvar.frozenRowIndex,\n          bodyTrHeight: this.xvar.bodyTrHeight\n        });\n      }\n      replaceGroupTr.call(this, \"left-body-scroll\", headerColGroup, leftBodyGroupingData, list, scrollConfig);\n    }\n\n    // body\n    if (this.xvar.frozenRowIndex > 0) {\n      // 상단 행고정\n      replaceGroupTr.call(this, \"top-body-scroll\", headerColGroup, bodyGroupingData, list.slice(0, this.xvar.frozenRowIndex), {\n        paintStartRowIndex: 0,\n        paintRowCount: this.xvar.frozenRowIndex,\n        bodyTrHeight: this.xvar.bodyTrHeight\n      });\n    }\n\n    replaceGroupTr.call(this, \"body-scroll\", headerColGroup, bodyGroupingData, list, scrollConfig);\n  }\n\n  if (this.xvar.frozenColumnIndex > 0) {\n    if (cfg.footSum && this.needToPaintSum) {\n      // 바닥 요약\n      repaintSum.call(this, \"bottom-left-body\", headerColGroup, leftFootSumData, list);\n    }\n  }\n\n  if (cfg.footSum && this.needToPaintSum) {\n    // 바닥 요약\n    repaintSum.call(this, \"bottom-body-scroll\", headerColGroup, footSumData, list, scrollConfig);\n  }\n};\n\nconst repaintRow = function (_dindex) {\n  let self = this,\n      cfg  = this.config,\n      list = this.list;\n  /// ~~~~~~\n\n  let paintStartRowIndex    = Math.floor(Math.abs(this.$.panel[\"body-scroll\"].position().top) / this.xvar.bodyTrHeight) + this.xvar.frozenRowIndex,\n      asideBodyRowData      = this.asideBodyRowData,\n      leftBodyRowData       = this.leftBodyRowData,\n      bodyRowData           = this.bodyRowData,\n      leftFootSumData       = this.leftFootSumData,\n      footSumData           = this.footSumData,\n      asideBodyGroupingData = this.asideBodyGroupingData,\n      leftBodyGroupingData  = this.leftBodyGroupingData,\n      bodyGroupingData      = this.bodyGroupingData,\n      bodyAlign             = cfg.body.align,\n      paintRowCount         = Math.ceil(this.$.panel[\"body\"].height() / this.xvar.bodyTrHeight) + 1,\n      scrollConfig          = {\n        paintStartRowIndex: paintStartRowIndex,\n        paintRowCount: paintRowCount,\n        bodyTrHeight: this.xvar.bodyTrHeight\n      };\n\n  let repaintSum = function (_elTargetKey, _colGroup, _bodyRow, _list) {\n    let _elTarget = this.$.panel[_elTargetKey],\n        SS        = [],\n        cgi, cgl, tri, trl, ci, cl, col, cellHeight, colAlign;\n\n    SS.push('<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">');\n    SS.push('<colgroup>');\n    for (cgi = 0, cgl = _colGroup.length; cgi < cgl; cgi++) {\n      SS.push('<col style=\"width:' + _colGroup[cgi]._width + 'px;\"  />');\n    }\n    SS.push('<col  />');\n    SS.push('</colgroup>');\n\n    for (tri = 0, trl = _bodyRow.rows.length; tri < trl; tri++) {\n      SS.push('<tr class=\"tr-sum\">');\n      for (ci = 0, cl = _bodyRow.rows[tri].cols.length; ci < cl; ci++) {\n        col = _bodyRow.rows[tri].cols[ci];\n        cellHeight = cfg.body.columnHeight * col.rowspan - cfg.body.columnBorderWidth;\n        colAlign = col.align || bodyAlign;\n\n        SS.push('<td ',\n          'data-ax6grid-panel-name=\"' + _elTargetKey + '\" ',\n          'data-ax6grid-column-row=\"' + tri + '\" ',\n          'data-ax6grid-column-col=\"' + ci + '\" ',\n          'data-ax6grid-column-rowIndex=\"' + tri + '\" ',\n          'data-ax6grid-column-colIndex=\"' + col.colIndex + '\" ',\n          'data-ax6grid-column-attr=\"' + (col.columnAttr || \"sum\") + '\" ',\n          (function (_focusedColumn, _selectedColumn) {\n            var attrs = \"\";\n            if (_focusedColumn) {\n              attrs += 'data-ax6grid-column-focused=\"true\" ';\n            }\n            if (_selectedColumn) {\n              attrs += 'data-ax6grid-column-selected=\"true\" ';\n            }\n            return attrs;\n          })(this.focusedColumn[\"sum_\" + col.colIndex + \"_\" + tri], this.selectedColumn[\"sum_\" + col.colIndex + \"_\" + tri]),\n          'colspan=\"' + col.colspan + '\" ',\n          'rowspan=\"' + col.rowspan + '\" ',\n          'class=\"' + (function (_col) {\n            var tdCSS_class = \"\";\n            if (_col.styleClass) {\n              if (U.isFunction(_col.styleClass)) {\n                tdCSS_class += _col.styleClass.call({\n                  column: _col,\n                  key: _col.key,\n                  isFootSum: true\n                }) + \" \";\n              } else {\n                tdCSS_class += _col.styleClass + \" \";\n              }\n            }\n            if (cfg.body.columnBorderWidth) tdCSS_class += \"hasBorder \";\n            if (ci == cl - 1) tdCSS_class += \"isLastColumn \";\n            return tdCSS_class;\n          }).call(this, col) + '\" ',\n          'style=\"height: ' + cellHeight + 'px;min-height: 1px;\">');\n\n        SS.push((function (_cellHeight) {\n          var lineHeight = (cfg.body.columnHeight - cfg.body.columnPadding * 2 - cfg.body.columnBorderWidth);\n          if (!col.multiLine) {\n            _cellHeight = cfg.body.columnHeight - cfg.body.columnBorderWidth;\n          }\n\n          return '<span data-ax6grid-cellHolder=\"' + ((col.multiLine) ? 'multiLine' : '') + '\" ' +\n            ((colAlign) ? 'data-ax6grid-text-align=\"' + colAlign + '\"' : '') +\n            '\" style=\"height:' + _cellHeight + 'px;line-height: ' + lineHeight + 'px;\">';\n\n        })(cellHeight), getSumFieldValue.call(this, _list, col), '</span>');\n\n        SS.push('</td>');\n      }\n      SS.push('<td ',\n        'data-ax6grid-column-row=\"null\" ',\n        'data-ax6grid-column-col=\"null\" ',\n        'data-ax6grid-column-attr=\"' + (\"sum\") + '\" ',\n        'style=\"height: ' + (cfg.body.columnHeight) + 'px;min-height: 1px;\" ',\n        '></td>');\n      SS.push('</tr>');\n    }\n\n    SS.push('</table>');\n\n    _elTarget.empty().get(0).innerHTML = SS.join('');\n    return true;\n  };\n  let replaceGroupTr = function (_elTargetKey, _colGroup, _groupRow, _list, _scrollConfig) {\n    let _elTarget = this.$.panel[_elTargetKey],\n        SS        = [],\n        di, dl, tri, trl, ci, cl, col, cellHeight, colAlign;\n\n    if (typeof _scrollConfig === \"undefined\" || typeof _scrollConfig['paintStartRowIndex'] === \"undefined\") {\n      _scrollConfig = {\n        paintStartRowIndex: 0,\n        paintRowCount: _list.length\n      };\n    }\n\n    for (di = _scrollConfig.paintStartRowIndex, dl = (function () {\n      let len;\n      len = _list.length;\n      if (_scrollConfig.paintRowCount + _scrollConfig.paintStartRowIndex < len) {\n        len = _scrollConfig.paintRowCount + _scrollConfig.paintStartRowIndex;\n      }\n      return len;\n    })(); di < dl; di++) {\n      if (_list[di] && _groupRow && \"__isGrouping\" in _list[di]) {\n        let rowTable = _groupRow;\n        SS = [];\n        for (tri = 0, trl = rowTable.rows.length; tri < trl; tri++) {\n          for (ci = 0, cl = rowTable.rows[tri].cols.length; ci < cl; ci++) {\n            col = rowTable.rows[tri].cols[ci];\n            cellHeight = cfg.body.columnHeight * col.rowspan - cfg.body.columnBorderWidth;\n            colAlign = col.align || bodyAlign;\n\n            SS.push('<td ',\n              'data-ax6grid-panel-name=\"' + _elTargetKey + '\" ',\n              'data-ax6grid-data-index=\"' + di + '\" ',\n              'data-ax6grid-column-row=\"' + tri + '\" ',\n              'data-ax6grid-column-col=\"' + ci + '\" ',\n              'data-ax6grid-column-rowIndex=\"' + col.rowIndex + '\" ',\n              'data-ax6grid-column-colIndex=\"' + col.colIndex + '\" ',\n              'data-ax6grid-column-attr=\"' + (col.columnAttr || \"default\") + '\" ',\n              (function (_focusedColumn, _selectedColumn) {\n                let attrs = \"\";\n                if (_focusedColumn) {\n                  attrs += 'data-ax6grid-column-focused=\"true\" ';\n                }\n                if (_selectedColumn) {\n                  attrs += 'data-ax6grid-column-selected=\"true\" ';\n                }\n                return attrs;\n              })(this.focusedColumn[di + \"_\" + col.colIndex + \"_\" + col.rowIndex], this.selectedColumn[di + \"_\" + col.colIndex + \"_\" + col.rowIndex]),\n              'colspan=\"' + col.colspan + '\" ',\n              'rowspan=\"' + col.rowspan + '\" ',\n              'class=\"' + (function (_col) {\n                let tdCSS_class = \"\";\n                if (_col.styleClass) {\n                  if (U.isFunction(_col.styleClass)) {\n                    tdCSS_class += _col.styleClass.call({\n                      column: _col,\n                      key: _col.key,\n                      item: _list[di],\n                      index: di\n                    }) + \" \";\n                  } else {\n                    tdCSS_class += _col.styleClass + \" \";\n                  }\n                }\n                if (cfg.body.columnBorderWidth) tdCSS_class += \"hasBorder \";\n                if (ci == cl - 1) tdCSS_class += \"isLastColumn \";\n                return tdCSS_class;\n              }).call(this, col) + '\" ',\n              'style=\"height: ' + cellHeight + 'px;min-height: 1px;\">');\n\n            SS.push((function (_cellHeight) {\n              let lineHeight = (cfg.body.columnHeight - cfg.body.columnPadding * 2 - cfg.body.columnBorderWidth);\n              if (!col.multiLine) {\n                _cellHeight = cfg.body.columnHeight - cfg.body.columnBorderWidth;\n              }\n\n              return '<span data-ax6grid-cellHolder=\"' + ((col.multiLine) ? 'multiLine' : '') + '\" ' +\n                ((colAlign) ? 'data-ax6grid-text-align=\"' + colAlign + '\"' : '') +\n                '\" style=\"height:' + _cellHeight + 'px;line-height: ' + lineHeight + 'px;\">';\n\n            })(cellHeight), getGroupingValue.call(this, _list[di], di, col), '</span>');\n\n            SS.push('</td>');\n          }\n          SS.push('<td ',\n            'data-ax6grid-column-row=\"null\" ',\n            'data-ax6grid-column-col=\"null\" ',\n            'data-ax6grid-data-index=\"' + di + '\" ',\n            'data-ax6grid-column-attr=\"' + (\"default\") + '\" ',\n            'style=\"height: ' + (cfg.body.columnHeight) + 'px;min-height: 1px;\" ',\n            '></td>');\n        }\n        _elTarget.find('tr[data-ax6grid-tr-data-index=\"' + di + '\"]').empty().get(0).innerHTML = SS.join('');\n      }\n    }\n  };\n  let replaceTr = function (_elTargetKey, _colGroup, _bodyRow, _list, di) {\n    let _elTarget                                             = this.$.panel[_elTargetKey],\n        SS                                                    = [],\n        tri, trl, ci, cl, col, cellHeight, colAlign, rowTable = _bodyRow,\n        odi                                                   = (typeof _list[di].__origin_index__ !== \"undefined\") ? _list[di].__origin_index__ : di;\n\n    for (tri = 0, trl = rowTable.rows.length; tri < trl; tri++) {\n      for (ci = 0, cl = rowTable.rows[tri].cols.length; ci < cl; ci++) {\n        col = rowTable.rows[tri].cols[ci];\n        cellHeight = cfg.body.columnHeight * col.rowspan - cfg.body.columnBorderWidth;\n        colAlign = col.align || bodyAlign;\n\n        SS.push('<td ',\n          'data-ax6grid-panel-name=\"' + _elTargetKey + '\" ',\n          'data-ax6grid-data-index=\"' + di + '\" ',\n          'data-ax6grid-data-o-index=\"' + odi + '\" ',\n          'data-ax6grid-column-row=\"' + tri + '\" ',\n          'data-ax6grid-column-col=\"' + ci + '\" ',\n          'data-ax6grid-column-rowIndex=\"' + col.rowIndex + '\" ',\n          'data-ax6grid-column-colIndex=\"' + col.colIndex + '\" ',\n          'data-ax6grid-column-attr=\"' + (col.columnAttr || \"default\") + '\" ',\n          (function (_focusedColumn, _selectedColumn) {\n            let attrs = \"\";\n            if (_focusedColumn) {\n              attrs += 'data-ax6grid-column-focused=\"true\" ';\n            }\n            if (_selectedColumn) {\n              attrs += 'data-ax6grid-column-selected=\"true\" ';\n            }\n            return attrs;\n          })(this.focusedColumn[di + \"_\" + col.colIndex + \"_\" + col.rowIndex], this.selectedColumn[di + \"_\" + col.colIndex + \"_\" + col.rowIndex]),\n          'colspan=\"' + col.colspan + '\" ',\n          'rowspan=\"' + col.rowspan + '\" ',\n          'class=\"' + (function (_col) {\n            let tdCSS_class = \"\";\n            if (_col.styleClass) {\n              if (U.isFunction(_col.styleClass)) {\n                tdCSS_class += _col.styleClass.call({\n                  column: _col,\n                  key: _col.key,\n                  item: _list[di],\n                  index: di\n                }) + \" \";\n              } else {\n                tdCSS_class += _col.styleClass + \" \";\n              }\n            }\n            if (cfg.body.columnBorderWidth) tdCSS_class += \"hasBorder \";\n            if (ci == cl - 1) tdCSS_class += \"isLastColumn \";\n            return tdCSS_class;\n          }).call(this, col) + '\" ',\n          'style=\"height: ' + cellHeight + 'px;min-height: 1px;\">');\n\n        SS.push((function (_cellHeight) {\n          let lineHeight = (cfg.body.columnHeight - cfg.body.columnPadding * 2 - cfg.body.columnBorderWidth);\n          if (!col.multiLine) {\n            _cellHeight = cfg.body.columnHeight - cfg.body.columnBorderWidth;\n          }\n\n          return '<span data-ax6grid-cellHolder=\"' + ((col.multiLine) ? 'multiLine' : '') + '\" ' +\n            ((colAlign) ? 'data-ax6grid-text-align=\"' + colAlign + '\"' : '') +\n            '\" style=\"height:' + _cellHeight + 'px;' + ((col.multiLine) ? '' : 'line-height: ' + lineHeight + 'px;') + '\">';\n\n        })(cellHeight), getFieldValue.call(this, _list, _list[di], di, col), '</span>');\n        SS.push('</td>');\n      }\n      SS.push('<td ',\n        'data-ax6grid-column-row=\"null\" ',\n        'data-ax6grid-column-col=\"null\" ',\n        'data-ax6grid-data-index=\"' + di + '\" ',\n        'data-ax6grid-column-attr=\"' + (\"default\") + '\" ',\n        'style=\"height: ' + (cfg.body.columnHeight) + 'px;min-height: 1px;\" ',\n        '></td>');\n    }\n\n    _elTarget.find('tr[data-ax6grid-tr-data-index=\"' + di + '\"]').empty().get(0).innerHTML = SS.join('');\n  };\n\n  // left\n  if (this.xvar.frozenColumnIndex > 0) {\n    if (this.xvar.frozenRowIndex > _dindex) {\n      // 상단 행고정\n      replaceTr.call(this, \"top-left-body\", this.leftHeaderColGroup, leftBodyRowData, list.slice(0, this.xvar.frozenRowIndex), _dindex);\n    } else {\n      replaceTr.call(this, \"left-body-scroll\", this.leftHeaderColGroup, leftBodyRowData, list, _dindex);\n    }\n  }\n\n  // body\n  if (this.xvar.frozenRowIndex > _dindex) {\n    // 상단 행고정\n    replaceTr.call(this, \"top-body-scroll\", this.headerColGroup, bodyRowData, list.slice(0, this.xvar.frozenRowIndex), _dindex);\n  } else {\n    replaceTr.call(this, \"body-scroll\", this.headerColGroup, bodyRowData, list, _dindex);\n  }\n\n  // body.grouping tr 다시 그리기..\n  if (cfg.body.grouping) {\n    // left\n    if (this.xvar.frozenColumnIndex > 0) {\n      if (this.xvar.frozenRowIndex > _dindex) {\n        // 상단 행고정\n        replaceGroupTr.call(this, \"top-left-body\", this.leftHeaderColGroup, leftBodyGroupingData, list.slice(0, this.xvar.frozenRowIndex));\n      }\n      else {\n        replaceGroupTr.call(this, \"left-body-scroll\", this.leftHeaderColGroup, leftBodyGroupingData, list, scrollConfig);\n      }\n    }\n\n    // body\n    if (this.xvar.frozenRowIndex > _dindex) {\n      // 상단 행고정\n      replaceGroupTr.call(this, \"top-body-scroll\", this.headerColGroup, bodyGroupingData, list.slice(0, this.xvar.frozenRowIndex));\n    }\n    else {\n      replaceGroupTr.call(this, \"body-scroll\", this.headerColGroup, bodyGroupingData, list, scrollConfig);\n    }\n  }\n\n  if (this.xvar.frozenColumnIndex > 0) {\n    if (cfg.footSum && this.needToPaintSum) {\n      // 바닥 요약\n      repaintSum.call(this, \"bottom-left-body\", this.leftHeaderColGroup, leftFootSumData, list);\n    }\n  }\n\n  if (cfg.footSum && this.needToPaintSum) {\n    // 바닥 요약\n    repaintSum.call(this, \"bottom-body-scroll\", this.headerColGroup, footSumData, list, scrollConfig);\n  }\n};\n\nconst updateRowState = function (_states, _dindex, _doindex, _data) {\n  let self      = this,\n      cfg       = this.config,\n      processor = {\n        \"selected\": function (_dindex, _doindex) {\n          if (this.list[_doindex]) {\n            let i = this.$.livePanelKeys.length;\n            while (i--) {\n              this.$.panel[this.$.livePanelKeys[i]]\n                .find('[data-ax6grid-tr-data-index=\"' + _dindex + '\"]')\n                .attr(\"data-ax6grid-selected\", this.list[_doindex][cfg.columnKeys.selected]);\n            }\n          }\n        },\n        \"selectedClear\": function () {\n          let di = this.list.length;\n          let pi;\n\n          if (!this.proxyList) {\n            while (di--) {\n              if (this.list[di][cfg.columnKeys.selected]) {\n                pi = this.$.livePanelKeys.length;\n                while (pi--) {\n                  this.$.panel[this.$.livePanelKeys[pi]]\n                    .find('[data-ax6grid-tr-data-index=\"' + di + '\"]')\n                    .attr(\"data-ax6grid-selected\", false);\n                }\n              }\n              this.list[di][cfg.columnKeys.selected] = false;\n            }\n          } else {\n            while (di--) {\n              this.list[di][cfg.columnKeys.selected] = false;\n            }\n            di = this.proxyList.length;\n            while (di--) {\n              if (this.list[doi][cfg.columnKeys.selected]) {\n                pi = this.$.livePanelKeys.length;\n                while (pi--) {\n                  this.$.panel[this.$.livePanelKeys[pi]]\n                    .find('[data-ax6grid-tr-data-index=\"' + di + '\"]')\n                    .attr(\"data-ax6grid-selected\", false);\n                }\n              }\n\n              this.proxyList[di][cfg.columnKeys.selected] = false;\n              let doi = this.proxyList[di].__original_index__;\n            }\n          }\n        },\n        \"cellChecked\": function (_dindex, _doindex, _data) {\n          let key      = _data.key,\n              rowIndex = _data.rowIndex,\n              colIndex = _data.colIndex;\n\n          let panelName = (function () {\n            let _panels = [];\n            if (this.xvar.frozenRowIndex > _dindex) _panels.push(\"top\");\n            if (this.xvar.frozenColumnIndex > colIndex) _panels.push(\"left\");\n            _panels.push(\"body\");\n            if (_panels[0] !== \"top\") _panels.push(\"scroll\");\n            return _panels.join(\"-\");\n          }).call(this);\n\n          this.$.panel[panelName]\n            .find('[data-ax6grid-tr-data-index=\"' + _dindex + '\"]')\n            .find('[data-ax6grid-column-rowIndex=\"' + rowIndex + '\"][data-ax6grid-column-colIndex=\"' + colIndex + '\"]')\n            .find('[data-ax6grid-editor=\"checkbox\"]')\n            .attr(\"data-ax6grid-checked\", '' + _data.checked);\n        }\n      };\n\n  if (typeof _doindex === \"undefined\") _doindex = _dindex;\n\n  _states.forEach(function (_state) {\n    if (!processor[_state]) throw 'invaild state name';\n    processor[_state].call(self, _dindex, _doindex, _data);\n  });\n};\n\nconst updateRowStateAll = function (_states, _data) {\n  let self      = this,\n      cfg       = this.config,\n      processor = {\n        \"selected\": function (_dindex) {\n          repaint.call(this, true);\n        }\n      };\n\n  _states.forEach(function (_state) {\n    if (!processor[_state]) throw 'invaild state name';\n    processor[_state].call(self, _data);\n  });\n};\n\nconst toggleCollapse = function (_dindex, _doindex, _collapse) {\n  if (DATA.toggleCollapse.call(this, _dindex, _doindex, _collapse)) {\n    this.proxyList = DATA.getProxyList.call(this, this.list);\n    this.align();\n  }\n};\n\nconst scrollTo = function (css, opts) {\n  let self = this;\n  if (typeof opts === \"undefined\") opts = {timeoutUnUse: false};\n  if (this.isInlineEditing) {\n    for (var key in this.inlineEditing) {\n      //if(this.inlineEditing[key].editor.type === \"select\") {}\n      // 인라인 에디팅 인데 스크롤 이벤트가 발생하면 디액티브 처리\n      inlineEdit.deActive.call(this, \"ESC\", key);\n    }\n  }\n\n  if (this.config.asidePanelWidth > 0 && \"top\" in css) {\n    this.$.panel[\"aside-body-scroll\"].css({top: css.top});\n  }\n  if (this.xvar.frozenColumnIndex > 0 && \"top\" in css) {\n    this.$.panel[\"left-body-scroll\"].css({top: css.top});\n  }\n  if (this.xvar.frozenRowIndex > 0 && \"left\" in css) {\n    this.$.panel[\"top-body-scroll\"].css({left: css.left});\n  }\n\n  this.$.panel[\"body-scroll\"].css(css);\n\n  if (this.config.footSum && \"left\" in css) {\n    this.$.panel[\"bottom-body-scroll\"].css({left: css.left});\n  }\n\n  // 바디 리페인팅 this.__throttledScroll 은 body init 에서 초기화\n  if (this.__throttledScroll) {\n    this.__throttledScroll(css, opts);\n  } else {\n    if (this.config.virtualScrollY && !opts.noRepaint && \"top\" in css) {\n      repaint.call(this);\n    } else if (this.config.virtualScrollX && !opts.noRepaint && \"left\" in css) {\n      repaint.call(this);\n    }\n    if (opts.callback) {\n      opts.callback();\n    }\n  }\n};\n\nconst blur = function () {\n  columnSelect.focusClear.call(this);\n  columnSelect.clear.call(this);\n  if (this.isInlineEditing) {\n    inlineEdit.deActive.call(this);\n  }\n};\n\nconst moveFocus = function (_position) {\n  let focus = {\n    \"UD\": function (_dy) {\n      let moveResult = true,\n          focusedColumn, originalColumn, while_i,\n          nPanelInfo;\n\n      for (let c in this.focusedColumn) {\n        focusedColumn = jQuery.extend({}, this.focusedColumn[c], true);\n        break;\n      }\n\n      if (!focusedColumn) return false;\n\n      originalColumn = this.bodyRowMap[focusedColumn.rowIndex + \"_\" + focusedColumn.colIndex];\n      columnSelect.focusClear.call(this);\n      columnSelect.clear.call(this);\n\n      if (_dy > 0) {\n        // 아래로\n        if (focusedColumn.rowIndex + (originalColumn.rowspan - 1) + _dy > this.bodyRowTable.rows.length - 1) {\n          focusedColumn.dindex = focusedColumn.dindex + _dy;\n          focusedColumn.doindex = focusedColumn.doindex + _dy;\n          focusedColumn.rowIndex = 0;\n          if (focusedColumn.dindex > this.list.length - 1) {\n            focusedColumn.dindex = focusedColumn.doindex = this.list.length - 1;\n            moveResult = false;\n          }\n        } else {\n          focusedColumn.rowIndex = focusedColumn.rowIndex + _dy;\n        }\n      }\n      else {\n        // 위로\n        if (focusedColumn.rowIndex + _dy < 0) {\n          focusedColumn.dindex = focusedColumn.dindex + _dy;\n          focusedColumn.doindex = focusedColumn.doindex + _dy;\n          focusedColumn.rowIndex = this.bodyRowTable.rows.length - 1;\n          if (focusedColumn.dindex < 0) {\n            focusedColumn.dindex = focusedColumn.doindex = 0;\n            moveResult = false;\n          }\n        } else {\n          focusedColumn.rowIndex = focusedColumn.rowIndex + _dy;\n        }\n      }\n\n      while_i = 0;\n      while (typeof this.bodyRowMap[focusedColumn.rowIndex + \"_\" + focusedColumn.colIndex] === \"undefined\") {\n        if (focusedColumn.rowIndex == 0 || while_i % 2 == ((_dy > 0) ? 0 : 1)) {\n          focusedColumn.colIndex--;\n        } else {\n          focusedColumn.rowIndex--;\n        }\n\n        if (focusedColumn.rowIndex <= 0 && focusedColumn.colIndex <= 0) {\n          // find fail\n          moveResult = false;\n          break;\n        }\n        while_i++;\n      }\n\n      nPanelInfo = UTIL.findPanelByColumnIndex.call(this, focusedColumn.dindex, focusedColumn.colIndex);\n\n      // if mergeCells\n      if (this.config.body.mergeCells && this.list.length) {\n        while (!this.$.panel[nPanelInfo.panelName]\n          .find('[data-ax6grid-tr-data-index=\"' + focusedColumn.dindex + '\"]')\n          .find('[data-ax6grid-column-rowindex=\"' + focusedColumn.rowIndex + '\"][data-ax6grid-column-colindex=\"' + focusedColumn.colIndex + '\"]').get(0)) {\n\n          if (_dy > 0) {\n            focusedColumn.dindex++;\n          } else {\n            focusedColumn.dindex--;\n          }\n\n          if (focusedColumn.dindex < 0 || focusedColumn.dindex > this.list.length - 1) {\n            break;\n          }\n        }\n        nPanelInfo = UTIL.findPanelByColumnIndex.call(this, focusedColumn.dindex, focusedColumn.colIndex);\n      }\n\n      focusedColumn.panelName = nPanelInfo.panelName;\n\n      // 포커스 컬럼의 위치에 따라 스크롤 처리.ㅊㅇ\n\n      if (focusedColumn.dindex + 1 > this.xvar.frozenRowIndex) {\n        if (focusedColumn.dindex <= this.xvar.virtualPaintStartRowIndex) {\n          let newTop = (focusedColumn.dindex - this.xvar.frozenRowIndex - 1) * this.xvar.bodyTrHeight;\n          if (newTop < 0) newTop = 0;\n          scrollTo.call(this, {top: -newTop, timeoutUnUse: false});\n          SCROLLER.resize.call(this);\n        }\n        else if (focusedColumn.dindex + 1 > this.xvar.virtualPaintStartRowIndex + (this.xvar.virtualPaintRowCount - 2)) {\n          scrollTo.call(this, {top: (this.xvar.virtualPaintRowCount - 2 - focusedColumn.dindex) * this.xvar.bodyTrHeight, timeoutUnUse: false});\n          SCROLLER.resize.call(this);\n        }\n      }\n\n      this.focusedColumn[focusedColumn.dindex + \"_\" + focusedColumn.colIndex + \"_\" + focusedColumn.rowIndex] = focusedColumn;\n      this.$.panel[focusedColumn.panelName]\n        .find('[data-ax6grid-tr-data-index=\"' + focusedColumn.dindex + '\"]')\n        .find('[data-ax6grid-column-rowindex=\"' + focusedColumn.rowIndex + '\"][data-ax6grid-column-colindex=\"' + focusedColumn.colIndex + '\"]')\n        .attr('data-ax6grid-column-focused', \"true\");\n\n      return moveResult;\n    },\n    \"LR\": function (_dx) {\n      let moveResult                                             = true,\n          focusedColumn, originalColumn,\n          while_i = 0, isScrollPanel = false, containerPanelName = \"\", nPanelInfo;\n\n      for (var c in this.focusedColumn) {\n        focusedColumn = jQuery.extend({}, this.focusedColumn[c], true);\n        break;\n      }\n      if (!focusedColumn) return false;\n\n      originalColumn = this.bodyRowMap[focusedColumn.rowIndex + \"_\" + focusedColumn.colIndex];\n\n      columnSelect.focusClear.call(this);\n      columnSelect.clear.call(this);\n\n      if (_dx < 0) {\n        focusedColumn.colIndex = focusedColumn.colIndex + _dx;\n        if (focusedColumn.colIndex < 0) {\n          focusedColumn.colIndex = 0;\n          moveResult = false;\n        }\n      }\n      else {\n        focusedColumn.colIndex = focusedColumn.colIndex + _dx;\n        if (focusedColumn.colIndex > this.colGroup.length - 1) {\n          focusedColumn.colIndex = this.colGroup.length - 1;\n          moveResult = false;\n        }\n      }\n\n      if (typeof this.bodyRowMap[focusedColumn.rowIndex + \"_\" + focusedColumn.colIndex] === \"undefined\") {\n        focusedColumn.rowIndex = 0;\n      }\n\n      if (this.list[focusedColumn.dindex] && this.list[focusedColumn.dindex].__isGrouping) {\n        if (_dx < 0) {\n          while (typeof this.bodyGroupingMap[focusedColumn.rowIndex + \"_\" + focusedColumn.colIndex] === \"undefined\") {\n            focusedColumn.colIndex--;\n            if (focusedColumn.colIndex <= 0) {\n              // find fail\n              moveResult = false;\n              break;\n            }\n          }\n        } else {\n          while (typeof this.bodyGroupingMap[focusedColumn.rowIndex + \"_\" + focusedColumn.colIndex] === \"undefined\") {\n            focusedColumn.colIndex++;\n            if (focusedColumn.colIndex >= this.colGroup.length) {\n              // find fail\n              moveResult = false;\n              break;\n            }\n          }\n        }\n      }\n      else {\n        if (_dx < 0) {\n          while (typeof this.bodyRowMap[focusedColumn.rowIndex + \"_\" + focusedColumn.colIndex] === \"undefined\") {\n            focusedColumn.colIndex--;\n            if (focusedColumn.colIndex <= 0) {\n              // find fail\n              moveResult = false;\n              break;\n            }\n          }\n        } else {\n          while (typeof this.bodyRowMap[focusedColumn.rowIndex + \"_\" + focusedColumn.colIndex] === \"undefined\") {\n            focusedColumn.colIndex++;\n            if (focusedColumn.colIndex >= this.colGroup.length) {\n              // find fail\n              moveResult = false;\n              break;\n            }\n          }\n        }\n      }\n\n      nPanelInfo = UTIL.findPanelByColumnIndex.call(this, focusedColumn.dindex, focusedColumn.colIndex);\n\n      // if mergeCells\n      if (this.config.body.mergeCells && this.list.length && focusedColumn.dindex > 1) {\n        while (!this.$.panel[nPanelInfo.panelName]\n          .find('[data-ax6grid-tr-data-index=\"' + focusedColumn.dindex + '\"]')\n          .find('[data-ax6grid-column-rowindex=\"' + focusedColumn.rowIndex + '\"][data-ax6grid-column-colindex=\"' + focusedColumn.colIndex + '\"]').get(0)) {\n\n          focusedColumn.dindex--;\n\n          if (focusedColumn.dindex < 0 || focusedColumn.dindex > this.list.length - 1) {\n            break;\n          }\n        }\n        nPanelInfo = UTIL.findPanelByColumnIndex.call(this, focusedColumn.dindex, focusedColumn.colIndex);\n      }\n\n      focusedColumn.panelName = nPanelInfo.panelName;\n\n      // 포커스 컬럼의 위치에 따라 스크롤 처리\n      let isScrollTo = (function () {\n        if (!this.config.virtualScrollX) return false;\n        let scrollLeft = 0;\n        if (focusedColumn.colIndex + 1 > this.xvar.frozenColumnIndex) {\n          if (focusedColumn.colIndex <= this.xvar.paintStartColumnIndex && this.colGroup[focusedColumn.colIndex]) {\n            scrollLeft = -this.colGroup[Number(focusedColumn.colIndex)]._sx;\n            scrollTo.call(this, {left: scrollLeft});\n            HEADER.scrollTo.call(this, {left: scrollLeft});\n            SCROLLER.resize.call(this);\n            return true;\n          }\n          else if (focusedColumn.colIndex >= this.xvar.paintEndColumnIndex && this.colGroup[Number(focusedColumn.colIndex)]) {\n            if (this.colGroup[Number(focusedColumn.colIndex)]._ex > this.xvar.bodyWidth) {\n              scrollLeft = (this.colGroup[Number(focusedColumn.colIndex)]._ex - this.xvar.bodyWidth);\n              scrollTo.call(this, {left: -scrollLeft});\n              HEADER.scrollTo.call(this, {left: -scrollLeft});\n              SCROLLER.resize.call(this);\n            }\n            return true;\n          }\n        }\n        scrollLeft = null;\n        return false;\n      }).call(this);\n\n      containerPanelName = nPanelInfo.containerPanelName;\n      isScrollPanel = nPanelInfo.isScrollPanel;\n\n      this.focusedColumn[focusedColumn.dindex + \"_\" + focusedColumn.colIndex + \"_\" + focusedColumn.rowIndex] = focusedColumn;\n\n      var $column = this.$.panel[focusedColumn.panelName]\n        .find('[data-ax6grid-tr-data-index=\"' + focusedColumn.dindex + '\"]')\n        .find('[data-ax6grid-column-rowindex=\"' + focusedColumn.rowIndex + '\"][data-ax6grid-column-colindex=\"' + focusedColumn.colIndex + '\"]')\n        .attr('data-ax6grid-column-focused', \"true\");\n\n      if (!isScrollTo && $column && isScrollPanel) {// 스크롤 패널 이라면~\n        // todo : 컬럼이동할 때에도 scrollTo 체크\n        var newLeft = (function () {\n          if ($column.position().left + $column.outerWidth() > Math.abs(this.$.panel[focusedColumn.panelName].position().left) + this.$.panel[containerPanelName].width()) {\n            return $column.position().left + $column.outerWidth() - this.$.panel[containerPanelName].width();\n          } else if (Math.abs(this.$.panel[focusedColumn.panelName].position().left) > $column.position().left) {\n            return $column.position().left;\n          } else {\n            return;\n          }\n        }).call(this);\n\n        if (typeof newLeft !== \"undefined\") {\n          HEADER.scrollTo.call(this, {left: -newLeft});\n          scrollTo.call(this, {left: -newLeft});\n          SCROLLER.resize.call(this);\n        }\n      }\n\n      return moveResult;\n    },\n    \"INDEX\": function (_dindex) {\n      let moveResult = true,\n          focusedColumn, originalColumn,\n          while_i;\n\n      for (let c in this.focusedColumn) {\n        focusedColumn = jQuery.extend({}, this.focusedColumn[c], true);\n        break;\n      }\n      if (!focusedColumn) {\n        focusedColumn = {\n          rowIndex: 0,\n          colIndex: 0\n        }\n      }\n      originalColumn = this.bodyRowMap[focusedColumn.rowIndex + \"_\" + focusedColumn.colIndex];\n\n      columnSelect.focusClear.call(this);\n      columnSelect.clear.call(this);\n\n\n      if (_dindex == \"end\") {\n        _dindex = this.list.length - 1;\n      }\n\n      focusedColumn.dindex = _dindex;\n      focusedColumn.rowIndex = 0;\n\n      while_i = 0;\n      while (typeof this.bodyRowMap[focusedColumn.rowIndex + \"_\" + focusedColumn.colIndex] === \"undefined\") {\n        if (focusedColumn.rowIndex == 0 || while_i % 2 == ((_dy > 0) ? 0 : 1)) {\n          focusedColumn.colIndex--;\n        } else {\n          focusedColumn.rowIndex--;\n        }\n\n        if (focusedColumn.rowIndex <= 0 && focusedColumn.colIndex <= 0) {\n          // find fail\n          break;\n        }\n        while_i++;\n      }\n\n      let nPanelInfo = UTIL.findPanelByColumnIndex.call(this, focusedColumn.dindex, focusedColumn.colIndex);\n      focusedColumn.panelName = nPanelInfo.panelName;\n\n      // 포커스 컬럼의 위치에 따라 스크롤 처리.\n      (function () {\n        if (focusedColumn.dindex + 1 > this.xvar.frozenRowIndex) {\n          if (focusedColumn.dindex < this.xvar.virtualPaintStartRowIndex) {\n            scrollTo.call(this, {top: -(focusedColumn.dindex - this.xvar.frozenRowIndex) * this.xvar.bodyTrHeight});\n            SCROLLER.resize.call(this);\n          }\n          else if (focusedColumn.dindex + 1 > this.xvar.virtualPaintStartRowIndex + (this.xvar.virtualPaintRowCount - 2)) {\n            scrollTo.call(this, {top: -(focusedColumn.dindex - this.xvar.frozenRowIndex - this.xvar.virtualPaintRowCount + 3) * this.xvar.bodyTrHeight});\n            SCROLLER.resize.call(this);\n          }\n        }\n      }).call(this);\n\n      this.focusedColumn[focusedColumn.dindex + \"_\" + focusedColumn.colIndex + \"_\" + focusedColumn.rowIndex] = focusedColumn;\n      this.$.panel[focusedColumn.panelName]\n        .find('[data-ax6grid-tr-data-index=\"' + focusedColumn.dindex + '\"]')\n        .find('[data-ax6grid-column-rowindex=\"' + focusedColumn.rowIndex + '\"][data-ax6grid-column-colindex=\"' + focusedColumn.colIndex + '\"]')\n        .attr('data-ax6grid-column-focused', \"true\");\n\n      return moveResult;\n    }\n  };\n\n  let processor = {\n    \"UP\": function () {\n      return focus[\"UD\"].call(this, -1);\n    },\n    \"DOWN\": function () {\n      return focus[\"UD\"].call(this, 1);\n    },\n    \"LEFT\": function () {\n      return focus[\"LR\"].call(this, -1);\n    },\n    \"RIGHT\": function () {\n      return focus[\"LR\"].call(this, 1);\n    },\n    \"HOME\": function () {\n      return focus[\"INDEX\"].call(this, 0);\n    },\n    \"END\": function () {\n      return focus[\"INDEX\"].call(this, \"end\");\n    },\n    \"position\": function (_position) {\n      return focus[\"INDEX\"].call(this, _position);\n    }\n  };\n\n  if (_position in processor) {\n    return processor[_position].call(this);\n  } else {\n    return processor[\"position\"].call(this, _position);\n  }\n};\n\nconst getExcelString = function () {\n  let cfg              = this.config,\n      list             = this.list,\n      bodyRowData      = this.bodyRowTable,\n      footSumData      = this.footSumTable,\n      bodyGroupingData = this.bodyGroupingTable;\n\n  // body-scroll 의 포지션에 의존적이므로..\n  let getBody = function (_colGroup, _bodyRow, _groupRow, _list) {\n    let SS = [],\n        di, dl,\n        tri, trl,\n        ci, cl,\n        col, val;\n\n    //SS.push('<table border=\"1\">');\n    for (di = 0, dl = _list.length; di < dl; di++) {\n      let isGroupingRow = false, rowTable;\n\n      if (_groupRow && \"__isGrouping\" in _list[di]) {\n        rowTable = _groupRow;\n        isGroupingRow = true;\n      } else {\n        rowTable = _bodyRow;\n      }\n\n      for (tri = 0, trl = rowTable.rows.length; tri < trl; tri++) {\n        SS.push('\\n<tr>');\n        for (ci = 0, cl = rowTable.rows[tri].cols.length; ci < cl; ci++) {\n          col = rowTable.rows[tri].cols[ci];\n\n          SS.push('<td ',\n            'colspan=\"' + col.colspan + '\" ',\n            'rowspan=\"' + col.rowspan + '\" ',\n            '>', (isGroupingRow) ? getGroupingValue.call(this, _list[di], di, col) : getFieldValue.call(this, _list, _list[di], di, col, val, \"text\"), '&nbsp;</td>');\n        }\n        SS.push('\\n</tr>');\n      }\n    }\n    //SS.push('</table>');\n    return SS.join('');\n  };\n  let getSum = function (_colGroup, _bodyRow, _list) {\n    let SS = [],\n        tri, trl,\n        ci, cl,\n        col;\n\n    //SS.push('<table border=\"1\">');\n    for (tri = 0, trl = _bodyRow.rows.length; tri < trl; tri++) {\n      SS.push('\\n<tr>');\n      for (ci = 0, cl = _bodyRow.rows[tri].cols.length; ci < cl; ci++) {\n        col = _bodyRow.rows[tri].cols[ci];\n        SS.push('<td ',\n          'colspan=\"' + col.colspan + '\" ',\n          'rowspan=\"' + col.rowspan + '\" ',\n          '>', getSumFieldValue.call(this, _list, col), '</td>');\n      }\n      SS.push('\\n</tr>');\n    }\n    //SS.push('</table>');\n\n    return SS.join('');\n  };\n\n  let po = [];\n  po.push(getBody.call(this, this.headerColGroup, bodyRowData, bodyGroupingData, list));\n  if (cfg.footSum) {\n    // 바닥 요약\n    po.push(getSum.call(this, this.headerColGroup, footSumData, list));\n  }\n\n  // right\n  if (cfg.rightSum) {\n    // todo : right 표현 정리\n  }\n\n  return po.join('');\n};\n\nconst click = function (_dindex, _doindex) {\n  let that = {\n    self: this,\n    page: this.page,\n    list: this.list,\n    item: this.list[_dindex],\n    dindex: _dindex\n  };\n\n  moveFocus.call(this, _dindex);\n\n  if (this.config.body.onClick) {\n    this.config.body.onClick.call(that);\n  }\n\n  that = null;\n  // console.log(this.$[\"panel\"][\"body-scroll\"].find('[data-ax6grid-tr-data-index=\"' + _dindex + '\"]>td:first-child'));\n};\n\nconst dblClick = function (_dindex, _doindex) {\n  let that = {\n    self: this,\n    page: this.page,\n    list: this.list,\n    item: this.list[_dindex],\n    dindex: _dindex\n  };\n\n  moveFocus.call(this, _dindex);\n\n  if (this.config.body.onDBLClick) {\n    this.config.body.onDBLClick.call(that);\n  }\n\n  that = null;\n};\n\n/**\n * @module AX6UIGrid_body\n */\nexport default {\n  /**\n   *\n   */\n  init: function () {\n    let self = this;\n\n    this.$[\"container\"][\"body\"].on(\"dblclick\", '[data-ax6grid-column-attr]', function (e) {\n      let panelName, attr,\n          row, col, dindex, doindex, rowIndex, colIndex,\n          targetDBLClick = {\n            \"default\": function (_column) {\n              if (self.isInlineEditing) {\n                for (let columnKey in self.inlineEditing) {\n                  if (columnKey == _column.dindex + \"_\" + _column.colIndex + \"_\" + _column.rowIndex) {\n                    return this;\n                  }\n                }\n              }\n\n              let column = self.bodyRowMap[_column.rowIndex + \"_\" + _column.colIndex], value = \"\";\n              if (column) {\n                if (!self.list[dindex].__isGrouping) {\n                  value = DATA.getValue.call(self, dindex, doindex, column.key);\n                }\n              }\n\n              let editor = self.colGroup[_column.colIndex].editor;\n              if (U.isObject(editor)) {\n                inlineEdit.active.call(self, self.focusedColumn, e, value);\n              } else {\n                // 더블클릭 실행\n                if (self.config.body.onDBLClick) {\n                  let that = {\n                    self: self,\n                    page: self.page,\n                    list: self.list,\n                    item: self.list[_column.dindex],\n                    dindex: _column.dindex,\n                    doindex: _column.doindex,\n                    rowIndex: _column.rowIndex,\n                    colIndex: _column.colIndex,\n                    column: column,\n                    value: self.list[_column.dindex][column.key]\n                  };\n                  self.config.body.onDBLClick.call(that);\n                }\n              }\n            },\n            \"rowSelector\": function (_column) {\n\n            },\n            \"lineNumber\": function (_column) {\n\n            }\n          };\n\n      panelName = this.getAttribute(\"data-ax6grid-panel-name\");\n      attr = this.getAttribute(\"data-ax6grid-column-attr\");\n      row = Number(this.getAttribute(\"data-ax6grid-column-row\"));\n      col = Number(this.getAttribute(\"data-ax6grid-column-col\"));\n      rowIndex = Number(this.getAttribute(\"data-ax6grid-column-rowIndex\"));\n      colIndex = Number(this.getAttribute(\"data-ax6grid-column-colIndex\"));\n      dindex = Number(this.getAttribute(\"data-ax6grid-data-index\"));\n      doindex = Number(this.getAttribute(\"data-ax6grid-data-o-index\"));\n\n      if (attr in targetDBLClick) {\n        targetDBLClick[attr]({\n          panelName: panelName,\n          attr: attr,\n          row: row,\n          col: col,\n          dindex: dindex,\n          doindex: doindex,\n          rowIndex: rowIndex,\n          colIndex: colIndex\n        });\n\n        U.stopEvent(e);\n      }\n    });\n\n    this.$[\"container\"][\"body\"].on(\"click\", '[data-ax6grid-column-attr]', function (e) {\n      let panelName, attr,\n          row, col, dindex, doindex, rowIndex, colIndex, disableSelection,\n          targetClick = {\n            \"default\": function (_column) {\n              let column = self.bodyRowMap[_column.rowIndex + \"_\" + _column.colIndex],\n                  that   = {\n                    self: self,\n                    page: self.page,\n                    list: self.list,\n                    item: self.list[_column.doindex],\n                    dindex: _column.dindex,\n                    doindex: _column.doindex,\n                    rowIndex: _column.rowIndex,\n                    colIndex: _column.colIndex,\n                    column: column,\n                    value: self.list[_column.dindex][column.key]\n                  };\n\n              if (column.editor && column.editor.type == \"checkbox\") { // todo : INLINE_EDITOR에서 처리 할수 있도록 구문 변경 필요.\n                let value = DATA.getValue.call(self, _column.dindex, _column.doindex, column.key),\n                    checked, newValue;\n\n                if (column.editor.config && column.editor.config.trueValue) {\n                  if (checked = !(value == column.editor.config.trueValue)) {\n                    newValue = column.editor.config.trueValue;\n                  } else {\n                    newValue = column.editor.config.falseValue;\n                  }\n                } else {\n                  newValue = checked = (value == false || value == \"false\" || value < \"1\") ? \"true\" : \"false\";\n                }\n\n                DATA.setValue.call(self, _column.dindex, _column.doindex, column.key, newValue);\n\n                updateRowState.call(self, [\"cellChecked\"], _column.dindex, _column.doindex, {\n                  key: column.key, rowIndex: _column.rowIndex, colIndex: _column.colIndex,\n                  editorConfig: column.editor.config, checked: checked\n                });\n              } else {\n                if (self.config.body.onClick) {\n                  self.config.body.onClick.call(that);\n                }\n              }\n            },\n            \"rowSelector\": function (_column) {\n              let item = self.list[_column.doindex];\n              if (item[self.config.columnKeys.disableSelection]) {\n                return false;\n              }\n\n              if (!self.config.multipleSelect && self.selectedDataIndexs[0] !== _column.doindex) {\n                updateRowState.call(self, [\"selectedClear\"]);\n                DATA.clearSelect.call(self);\n              }\n\n              DATA.select.call(self, _column.dindex, _column.doindex, undefined, {\n                internalCall: true\n              });\n              updateRowState.call(self, [\"selected\"], _column.dindex, _column.doindex);\n            },\n            \"lineNumber\": function (_column) {\n\n            },\n            \"tree-control\": function (_column, _el) {\n              //console.log(_column);\n              toggleCollapse.call(self, _column.dindex, _column.doindex);\n            }\n          };\n\n      panelName = this.getAttribute(\"data-ax6grid-panel-name\");\n      attr = this.getAttribute(\"data-ax6grid-column-attr\");\n      row = Number(this.getAttribute(\"data-ax6grid-column-row\"));\n      col = Number(this.getAttribute(\"data-ax6grid-column-col\"));\n      rowIndex = Number(this.getAttribute(\"data-ax6grid-column-rowIndex\"));\n      colIndex = Number(this.getAttribute(\"data-ax6grid-column-colIndex\"));\n      dindex = Number(this.getAttribute(\"data-ax6grid-data-index\"));\n      doindex = Number(this.getAttribute(\"data-ax6grid-data-o-index\"));\n\n      if (attr in targetClick) {\n        targetClick[attr]({\n          panelName: panelName,\n          attr: attr,\n          row: row,\n          col: col,\n          dindex: dindex,\n          doindex: doindex,\n          rowIndex: rowIndex,\n          colIndex: colIndex\n        }, this);\n      }\n    });\n\n    this.$[\"container\"][\"body\"].on(\"contextmenu\", function (e) {\n      let target, dindex, doindex, rowIndex, colIndex, item, column, param = {};\n\n      target = U.findParentNode(e.target, function (t) {\n        if (t.getAttribute(\"data-ax6grid-column-attr\")) {\n          return true;\n        }\n      });\n\n      if (target) {\n        // item 찾기\n        rowIndex = Number(target.getAttribute(\"data-ax6grid-column-rowIndex\"));\n        colIndex = Number(target.getAttribute(\"data-ax6grid-column-colIndex\"));\n        dindex = Number(target.getAttribute(\"data-ax6grid-data-index\"));\n        doindex = Number(target.getAttribute(\"data-ax6grid-data-o-index\"));\n        column = self.bodyRowMap[rowIndex + \"_\" + colIndex];\n        item = self.list[dindex];\n      }\n\n      if (self.config.body.onContextMenu) {\n        param = {\n          element: target,\n          dindex: dindex,\n          doindex: doindex,\n          rowIndex: rowIndex,\n          colIndex: colIndex,\n          item: item,\n          column: column,\n          gridSelf: self\n        };\n        self.config.body.onContextMenu.call({\n          self: self,\n          item: item,\n          column: column,\n          dindex: dindex,\n          doindex: doindex,\n          rowIndex: rowIndex,\n          colIndex: colIndex\n        }, e, param);\n      }\n\n      U.stopEvent(e.originalEvent);\n      target = null;\n      dindex = null;\n      doindex = null;\n      rowIndex = null;\n      colIndex = null;\n      item = null;\n      column = null;\n      param = null;\n    });\n\n    this.$[\"container\"][\"body\"]\n      .on(\"mousedown\", '[data-ax6grid-column-attr=\"default\"]', function (e) {\n        if (self.xvar.touchmoved) return false;\n        if (this.getAttribute(\"data-ax6grid-column-rowIndex\")) {\n          columnSelector.on.call(self, {\n            panelName: this.getAttribute(\"data-ax6grid-panel-name\"),\n            dindex: Number(this.getAttribute(\"data-ax6grid-data-index\")),\n            doindex: Number(this.getAttribute(\"data-ax6grid-data-o-index\")),\n            rowIndex: Number(this.getAttribute(\"data-ax6grid-column-rowIndex\")),\n            colIndex: Number(this.getAttribute(\"data-ax6grid-column-colIndex\")),\n            colspan: Number(this.getAttribute(\"colspan\"))\n          });\n        }\n      })\n      .on(\"dragstart\", function (e) {\n        U.stopEvent(e);\n        return false;\n      });\n\n    resetFrozenColumn.call(this);\n\n    // 그리드 바디에 출력할 여유 카운트\n    this.xvar.paintRowCountMargin = this.config.virtualScrollYCountMargin;\n    this.xvar.paintRowCountTopMargin = this.config.virtualScrollYCountMargin - Math.floor(this.config.virtualScrollYCountMargin / 2);\n\n    if (this.config.virtualScrollAccelerated) {\n      this.__throttledScroll = U.throttle(function (css, opts) {\n        if (this.config.virtualScrollY && !opts.noRepaint && \"top\" in css) {\n          repaint.call(this);\n        } else if (this.config.virtualScrollX && !opts.noRepaint && \"left\" in css) {\n          repaint.call(this);\n        }\n        if (opts.callback) {\n          opts.callback();\n        }\n      }, this.config.virtualScrollAcceleratedDelayTime);\n    } else {\n      this.__throttledScroll = false;\n    }\n  },\n  /**\n   *\n   * @param _reset\n   * @return {module:AX6UIGrid_body}\n   */\n  repaint: repaint,\n  /**\n   *\n   * @param _panelName\n   * @param _dindex\n   * @param _doindex\n   * @param _rowIndex\n   * @param _colIndex\n   * @param _newValue\n   */\n  repaintCell: repaintCell,\n  /**\n   *\n   * @param _dindex\n   */\n  repaintRow: repaintRow,\n  /**\n   *\n   * @param _states\n   * @param _dindex\n   * @param _doindex\n   * @param _data\n   */\n  updateRowState: updateRowState,\n  /**\n   *\n   * @param _states\n   * @param _data\n   */\n  updateRowStateAll: updateRowStateAll,\n  /**\n   *\n   * @param css\n   * @param opts\n   */\n  scrollTo: scrollTo,\n  /**\n   *\n   */\n  blur: blur,\n  /**\n   *\n   * @param _position\n   * @return {*}\n   */\n  moveFocus: moveFocus,\n  inlineEdit: inlineEdit,\n  /**\n   *\n   * @return {string}\n   */\n  getExcelString: getExcelString,\n  /**\n   *\n   * @param _dindex\n   * @param _doindex\n   * @param _collapse\n   */\n  toggleCollapse: toggleCollapse,\n  /**\n   *\n   * @param _dindex\n   * @param _doindex\n   */\n  click: click,\n  /**\n   *\n   * @param _dindex\n   * @param _doindex\n   */\n  dblClick: dblClick\n};"]}