diff --git a/index.html b/index.html
index e937bd9..d208d6c 100644
--- a/index.html
+++ b/index.html
@@ -507,7 +507,12 @@
wrapper: document.querySelector('section'),
addSerialNoColumn: true,
enableClusterize: true,
- data
+ data,
+ editing: {
+ getInput() {
+ return $('').get(0)
+ }
+ }
});
performance.mark("ReGrid-end");
diff --git a/lib/ReGrid.js b/lib/ReGrid.js
index 815cdfd..00b29e4 100644
--- a/lib/ReGrid.js
+++ b/lib/ReGrid.js
@@ -120,6 +120,7 @@ var ReGrid = function () {
var wrapper = _ref.wrapper,
events = _ref.events,
data = _ref.data,
+ editing = _ref.editing,
addSerialNoColumn = _ref.addSerialNoColumn,
enableClusterize = _ref.enableClusterize,
enableLogs = _ref.enableLogs;
@@ -135,6 +136,7 @@ var ReGrid = function () {
this.addSerialNoColumn = (0, _utils.getDefault)(addSerialNoColumn, false);
this.enableClusterize = (0, _utils.getDefault)(enableClusterize, false);
this.enableLogs = (0, _utils.getDefault)(enableLogs, true);
+ this.editing = (0, _utils.getDefault)(editing, {});
if (data) {
this.refresh(data);
@@ -290,6 +292,8 @@ var ReGrid = function () {
}, {
key: 'prepareData',
value: function prepareData(data) {
+ // cache original data passed
+ this._data = data;
var columns = data.columns,
rows = data.rows;
@@ -317,18 +321,6 @@ var ReGrid = function () {
rows: _rows
};
}
- }, {
- key: 'prepareColumns',
- value: function prepareColumns(columns) {
- return columns.map(function (col, i) {
- col.colIndex = i;
- col.isHeader = 1;
- col.format = function (val) {
- return '' + val + '';
- };
- return col;
- });
- }
}, {
key: 'bindEvents',
value: function bindEvents() {
@@ -408,9 +400,7 @@ var ReGrid = function () {
var _this2 = this;
var self = this;
- var $editPopup = this.wrapper.find('.edit-popup');
- $editPopup.hide();
this.$editingCell = null;
// if (!self.events.onCellEdit) return;
@@ -433,15 +423,30 @@ var ReGrid = function () {
}, {
key: 'activateEditing',
value: function activateEditing($cell) {
- var rowIndex = $cell.attr('data-row-index');
- var colIndex = $cell.attr('data-col-index');
- var $editCell = $cell.find('.edit-cell');
- var cell = this.getCell(rowIndex, colIndex);
+ var _getCellAttr = this.getCellAttr($cell),
+ rowIndex = _getCellAttr.rowIndex,
+ colIndex = _getCellAttr.colIndex;
+
+ if (this.$editingCell) {
+ var _getCellAttr2 = this.getCellAttr(this.$editingCell),
+ _rowIndex = _getCellAttr2._rowIndex,
+ _colIndex = _getCellAttr2._colIndex;
+
+ if (rowIndex === _rowIndex && colIndex === _colIndex) {
+ // editing the same cell
+ return;
+ }
+ }
this.$editingCell = $cell;
- $editCell.find('input').val(cell.content);
- $editCell.show();
- $editCell.find('input').select();
+ var $editCell = $cell.find('.edit-cell').empty();
+ var cell = this.getCell(rowIndex, colIndex);
+
+ var render = this.renderEditingInput(colIndex, cell.content, $editCell);
+
+ if (render) {
+ $editCell.show();
+ }
// showing the popup is the responsibility of event handler
// self.events.onCellEdit(
@@ -451,6 +456,20 @@ var ReGrid = function () {
// colIndex
// );
}
+ }, {
+ key: 'renderEditingInput',
+ value: function renderEditingInput(colIndex, value, parent) {
+ if (this.editing.renderInput) {
+ return this.editing.renderInput(colIndex, value, parent);
+ }
+ // render fallback
+ var $input = $('');
+
+ parent.append($input);
+ $input.val(value);
+ $input.select();
+ return true;
+ }
}, {
key: 'bindResizeColumn',
value: function bindResizeColumn() {
@@ -730,7 +749,7 @@ function makeDataAttributeString(props) {
}
function getEditCellHTML() {
- return '\n
\n \n
\n ';
+ return '\n \n ';
}
function getColumnHTML(column) {
diff --git a/lib/ReGrid.js.map b/lib/ReGrid.js.map
index d240154..a669cb2 100644
--- a/lib/ReGrid.js.map
+++ b/lib/ReGrid.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 64b7fd47ef4e609e5339","webpack:///./src/index.js","webpack:///./src/regrid.js","webpack:///./src/utils.js","webpack:///./src/style.scss?3ec1","webpack:///./src/style.scss","webpack:///./node_modules/css-loader/lib/css-base.js","webpack:///./node_modules/style-loader/lib/addStyles.js","webpack:///./node_modules/style-loader/lib/urls.js"],"names":["ReGrid","wrapper","events","data","addSerialNoColumn","enableClusterize","enableLogs","$","length","Error","refresh","html","header","find","bodyScrollable","footer","prepareData","render","makeDom","makeStyle","bindEvents","renderHeader","renderBody","setDimensions","columns","renderBodyWithClusterize","renderBodyHTML","rows","start","pageLength","end","initialData","getDataForClusterize","slice","clusterize","Clusterize","scrollElem","get","contentElem","log","appendRemainingData","dataAppended","promises","push","appendNextPagePromise","reduce","prev","cur","then","Promise","resolve","setTimeout","append","map","row","rowIndex","colIndex","value","getRow","cell","col_index","refreshCell","selector","row_index","$cell","body","$newCell","replaceWith","serialNoColumn","content","resizable","concat","i","val","_columns","_rows","col","isHeader","format","bindFocusCell","bindEditCell","bindResizeColumn","bindSortColumn","self","css","width","margin","minWidthMap","each","parseInt","attr","height","getCellAttr","setColumnWidth","setDefaultCellHeight","setBodyWidth","setStyle","display","$focusedCell","on","removeClass","addClass","$editPopup","hide","$editingCell","activateEditing","document","e","which","target","is","$editCell","getCell","show","select","isDragging","$currCell","startWidth","startX","getColumn","pageX","finalWidth","getColumnMinWidth","setColumnHeaderWidth","closest","sortAction","text","sortWith","onSort","sortRows","refreshRows","sort","a","b","_aIndex","_bIndex","_a","_b","availableWidth","headerWidth","deltaWidth","getColumnHeaderElement","rule","styleMap","styles","$style","prependTo","console","apply","arguments","camelCaseToDash","str","replace","g","toLowerCase","makeDataAttributeString","props","keys","Object","key","_key","undefined","join","trim","getEditCellHTML","getColumnHTML","column","dataAttr","editCellHTML","getRowHTML","getHeaderHTML","$header","getBodyHTML","prepareColumn","assign","prepareColumns","prepareRowHeader","prepareRow","prepareRows","getDefault","escapeRegExp","getCSSString","style","prop","hasOwnProperty","getCSSRuleBlock","namespaceSelector","buildCSSRule","cssRulesString","rulePatternStr","rulePattern","RegExp","match","property","propPattern","propertyStr","valueStr","replacer"],"mappings":"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CD;AACA,CAAC;;AAED;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA,iBAAiB,mBAAmB;AACpC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,iBAAiB,sBAAsB;AACvC;;AAEA;AACA,mBAAmB,2BAA2B;;AAE9C;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAgB,mBAAmB;AACnC;AACA;;AAEA;AACA;;AAEA,iBAAiB,2BAA2B;AAC5C;AACA;;AAEA,QAAQ,uBAAuB;AAC/B;AACA;AACA,GAAG;AACH;;AAEA,iBAAiB,uBAAuB;AACxC;AACA;;AAEA,2BAA2B;AAC3B;AACA;AACA;;AAEA;AACA;AACA;;AAEA,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA;AACA,cAAc;;AAEd,kDAAkD,sBAAsB;AACxE;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA,EAAE;AACF;AACA,EAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,EAAE;AACF;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;AACA,EAAE;AACF;AACA;;AAEA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,EAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uDAAuD;AACvD;;AAEA,6BAA6B,mBAAmB;;AAEhD;;AAEA;;AAEA;AACA;;;;;;;;AC/VA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,WAAW,EAAE;AACrD,wCAAwC,WAAW,EAAE;;AAErD;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA,sCAAsC;AACtC,GAAG;AACH;AACA,8DAA8D;AAC9D;;AAEA;AACA;AACA,EAAE;;AAEF;AACA;AACA","file":"regrid.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"ReGrid\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ReGrid\"] = factory();\n\telse\n\t\troot[\"ReGrid\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 64b7fd47ef4e609e5339","import ReGrid from './regrid.js';\nexport default ReGrid;\n\n\n\n// WEBPACK FOOTER //\n// ./src/index.js","/* globals $, Clusterize */\nimport {\n getHeaderHTML,\n getBodyHTML,\n getRowHTML,\n getColumnHTML,\n prepareRowHeader,\n buildCSSRule,\n prepareRows,\n getDefault\n} from './utils.js';\n// import $ from 'jQuery';\n// import Clusterize from 'clusterize.js';\n\nimport './style.scss';\n\nexport default class ReGrid {\n constructor({\n wrapper,\n events,\n data,\n addSerialNoColumn,\n enableClusterize,\n enableLogs\n }) {\n this.wrapper = $(wrapper);\n if (this.wrapper.length === 0) {\n throw new Error('Invalid argument given for `wrapper`');\n }\n\n this.events = getDefault(events, {});\n this.addSerialNoColumn = getDefault(addSerialNoColumn, false);\n this.enableClusterize = getDefault(enableClusterize, false);\n this.enableLogs = getDefault(enableLogs, true);\n\n if (data) {\n this.refresh(data);\n }\n }\n\n makeDom() {\n this.wrapper.html(`\n \n `);\n\n this.header = this.wrapper.find('.data-table-header');\n this.bodyScrollable = this.wrapper.find('.body-scrollable');\n // this.body = this.wrapper.find('.data-table-body');\n this.footer = this.wrapper.find('.data-table-footer');\n }\n\n refresh(data) {\n this.data = this.prepareData(data);\n this.render();\n }\n\n render() {\n if (this.wrapper.find('.data-table').length === 0) {\n this.makeDom();\n this.makeStyle();\n this.bindEvents();\n }\n\n this.renderHeader();\n this.renderBody();\n this.setDimensions();\n }\n\n renderHeader() {\n // fixed header\n this.header.html(getHeaderHTML(this.data.columns));\n }\n\n renderBody() {\n if (this.enableClusterize) {\n this.renderBodyWithClusterize();\n } else {\n this.renderBodyHTML();\n }\n }\n\n renderBodyHTML() {\n // scrollable body\n this.bodyScrollable.html(`\n \n ${getBodyHTML(this.data.rows)}\n
\n `);\n }\n\n renderBodyWithClusterize() {\n // empty body\n this.bodyScrollable.html(`\n \n `);\n\n this.start = 0;\n this.pageLength = 1000;\n this.end = this.start + this.pageLength;\n\n const initialData = this.getDataForClusterize(\n // only append ${this.pageLength} rows in the beginning\n // defer remaining rows\n this.data.rows.slice(this.start, this.end)\n );\n\n this.clusterize = new Clusterize({\n rows: initialData,\n scrollElem: this.bodyScrollable.get(0),\n contentElem: this.bodyScrollable.find('tbody').get(0)\n });\n this.log('dataAppended', this.pageLength);\n this.appendRemainingData();\n }\n\n appendRemainingData() {\n let dataAppended = this.pageLength;\n const promises = [];\n\n while (dataAppended + this.pageLength < this.data.rows.length) {\n this.start = this.end;\n this.end = this.start + this.pageLength;\n promises.push(this.appendNextPagePromise(this.start, this.end));\n dataAppended += this.pageLength;\n }\n\n if (this.data.rows.length % this.pageLength > 0) {\n // last page\n this.start = this.end;\n this.end = this.start + this.pageLength;\n promises.push(this.appendNextPagePromise(this.start, this.end));\n }\n\n return promises.reduce(\n (prev, cur) => prev.then(cur), Promise.resolve()\n );\n }\n\n appendNextPagePromise(start, end) {\n return new Promise(resolve => {\n setTimeout(() => {\n const rows = this.data.rows.slice(start, end);\n const data = this.getDataForClusterize(rows);\n\n this.clusterize.append(data);\n this.log('dataAppended', rows.length);\n resolve();\n }, 0);\n });\n }\n\n getDataForClusterize(rows) {\n return rows.map((row) => getRowHTML(row, { rowIndex: row[0].rowIndex }));\n }\n\n updateCell(rowIndex, colIndex, value) {\n const row = this.getRow(rowIndex);\n const cell = row.find(cell => cell.col_index === colIndex);\n\n cell.data = value;\n this.refreshCell(cell);\n }\n\n refreshRows() {\n this.renderBody();\n this.setDimensions();\n }\n\n refreshCell(cell) {\n const selector = `.data-table-col[data-row-index=\"${cell.row_index}\"][data-col-index=\"${cell.col_index}\"]`;\n const $cell = this.body.find(selector);\n const $newCell = $(getColumnHTML(cell));\n\n $cell.replaceWith($newCell);\n }\n\n prepareData(data) {\n let { columns, rows } = data;\n\n if (this.addSerialNoColumn) {\n const serialNoColumn = {\n content: 'Sr. No',\n resizable: false\n };\n\n columns = [serialNoColumn].concat(columns);\n\n rows = rows.map((row, i) => {\n const val = (i + 1) + '';\n\n return [val].concat(row);\n });\n }\n\n const _columns = prepareRowHeader(columns);\n const _rows = prepareRows(rows);\n\n return {\n columns: _columns,\n rows: _rows\n };\n }\n\n prepareColumns(columns) {\n return columns.map((col, i) => {\n col.colIndex = i;\n col.isHeader = 1;\n col.format = val => `${val}`;\n return col;\n });\n }\n\n bindEvents() {\n this.bindFocusCell();\n this.bindEditCell();\n this.bindResizeColumn();\n this.bindSortColumn();\n }\n\n setDimensions() {\n const self = this;\n\n // setting width as 0 will ensure that the\n // header doesn't take the available space\n this.header.css({\n width: 0,\n margin: 0\n });\n\n // cache minWidth for each column\n this.minWidthMap = getDefault(this.minWidthMap, []);\n this.header.find('.data-table-col').each(function () {\n const col = $(this);\n const width = parseInt(col.find('.content').css('width'), 10);\n const colIndex = col.attr('data-col-index');\n\n if (!self.minWidthMap[colIndex]) {\n // only set this once\n self.minWidthMap[colIndex] = width;\n }\n });\n\n // set initial width as naturally calculated by table's first row\n this.bodyScrollable.find('.data-table-row[data-row-index=\"0\"] .data-table-col').each(function () {\n const $cell = $(this);\n const width = parseInt($cell.find('.content').css('width'), 10);\n const height = parseInt($cell.find('.content').css('height'), 10);\n const { colIndex } = self.getCellAttr($cell);\n\n self.setColumnWidth(colIndex, width);\n self.setDefaultCellHeight(height);\n });\n\n this.setBodyWidth();\n\n this.setStyle('.data-table .body-scrollable', {\n 'margin-top': (this.header.height() + 1) + 'px'\n });\n\n // hide edit cells by default\n this.setStyle('.data-table .body-scrollable .edit-cell', {\n display: 'none'\n });\n\n this.bodyScrollable.find('.table').css('margin', 0);\n }\n\n bindFocusCell() {\n const self = this;\n\n this.$focusedCell = null;\n this.bodyScrollable.on('click', '.data-table-col', function () {\n const $cell = $(this);\n\n self.$focusedCell = $cell;\n self.bodyScrollable.find('.data-table-col').removeClass('selected');\n $cell.addClass('selected');\n });\n }\n\n bindEditCell() {\n const self = this;\n const $editPopup = this.wrapper.find('.edit-popup');\n\n $editPopup.hide();\n this.$editingCell = null;\n // if (!self.events.onCellEdit) return;\n\n this.bodyScrollable.on('dblclick', '.data-table-col', function () {\n self.activateEditing($(this));\n });\n\n $(document.body).on('keypress', (e) => {\n // enter keypress on focused cell\n if (e.which === 13 && this.$focusedCell) {\n self.activateEditing(this.$focusedCell);\n }\n });\n\n $(document.body).on('click', e => {\n if ($(e.target).is('.edit-cell, .edit-cell *')) return;\n self.bodyScrollable.find('.edit-cell').hide();\n });\n }\n\n activateEditing($cell) {\n const rowIndex = $cell.attr('data-row-index');\n const colIndex = $cell.attr('data-col-index');\n const $editCell = $cell.find('.edit-cell');\n const cell = this.getCell(rowIndex, colIndex);\n\n this.$editingCell = $cell;\n $editCell.find('input').val(cell.content);\n $editCell.show();\n $editCell.find('input').select();\n\n // showing the popup is the responsibility of event handler\n // self.events.onCellEdit(\n // $cell.get(0),\n // $editPopup,\n // rowIndex,\n // colIndex\n // );\n }\n\n bindResizeColumn() {\n const self = this;\n let isDragging = false;\n let $currCell, startWidth, startX;\n\n this.header.on('mousedown', '.data-table-col', function (e) {\n $currCell = $(this);\n const colIndex = $currCell.attr('data-col-index');\n const col = self.getColumn(colIndex);\n\n if (col && col.resizable === false) {\n return;\n }\n\n isDragging = true;\n startWidth = $currCell.find('.content').width();\n startX = e.pageX;\n });\n\n $('body').on('mouseup', function (e) {\n if (!$currCell) return;\n isDragging = false;\n const colIndex = $currCell.attr('data-col-index');\n\n if ($currCell) {\n const width = parseInt($currCell.find('.content').css('width'), 10);\n\n self.setColumnWidth(colIndex, width);\n self.setBodyWidth();\n $currCell = null;\n }\n });\n\n $('body').on('mousemove', function (e) {\n if (!isDragging) return;\n const finalWidth = startWidth + (e.pageX - startX);\n const colIndex = $currCell.attr('data-col-index');\n\n if (self.getColumnMinWidth(colIndex) > finalWidth) {\n // don't resize past minWidth\n return;\n }\n\n self.setColumnHeaderWidth(colIndex, finalWidth);\n });\n }\n\n bindSortColumn() {\n const self = this;\n\n this.header.on('click', '.data-table-col .content span', function () {\n const $cell = $(this).closest('.data-table-col');\n const sortAction = getDefault($cell.attr('data-sort-action'), 'none');\n const colIndex = $cell.attr('data-col-index');\n\n // reset sort indicator\n self.header.find('.sort-indicator').text('');\n self.header.find('.data-table-col').attr('data-sort-action', 'none');\n\n if (sortAction === 'none') {\n $cell.attr('data-sort-action', 'asc');\n $cell.find('.sort-indicator').text('▲');\n } else if (sortAction === 'asc') {\n $cell.attr('data-sort-action', 'desc');\n $cell.find('.sort-indicator').text('▼');\n } else if (sortAction === 'desc') {\n $cell.attr('data-sort-action', 'none');\n $cell.find('.sort-indicator').text('');\n }\n\n // sortWith this action\n const sortWith = $cell.attr('data-sort-action');\n\n if (self.events.onSort) {\n self.events.onSort(colIndex, sortWith);\n } else {\n self.sortRows(colIndex, sortWith);\n self.refreshRows();\n }\n });\n }\n\n sortRows(colIndex, sortAction = 'none') {\n colIndex = +colIndex;\n\n this.data.rows.sort((a, b) => {\n const _aIndex = a[0].rowIndex;\n const _bIndex = b[0].rowIndex;\n const _a = a[colIndex].content;\n const _b = b[colIndex].content;\n\n if (sortAction === 'none') {\n return _aIndex - _bIndex;\n } else if (sortAction === 'asc') {\n if (_a < _b) return -1;\n if (_a > _b) return 1;\n if (_a === _b) return 0;\n } else if (sortAction === 'desc') {\n if (_a < _b) return 1;\n if (_a > _b) return -1;\n if (_a === _b) return 0;\n }\n return 0;\n });\n }\n\n setColumnWidth(colIndex, width) {\n // set width for content\n this.setStyle(`[data-col-index=\"${colIndex}\"] .content`, {\n width: width + 'px'\n });\n // set width for edit cell\n this.setStyle(`[data-col-index=\"${colIndex}\"] .edit-cell`, {\n width: width + 'px'\n });\n }\n\n setColumnHeaderWidth(colIndex, width) {\n this.setStyle(`[data-col-index=\"${colIndex}\"][data-is-header] .content`, {\n width: width + 'px'\n });\n }\n\n setDefaultCellHeight(height) {\n this.setStyle('.data-table-col .content', {\n height: height + 'px'\n });\n }\n\n setRowHeight(rowIndex, height) {\n this.setStyle(`[data-row-index=\"${rowIndex}\"] .content`, {\n height: height + 'px'\n });\n }\n\n setColumnWidths() {\n const availableWidth = this.wrapper.width();\n const headerWidth = this.header.width();\n\n if (headerWidth > availableWidth) {\n // don't resize, horizontal scroll takes place\n return;\n }\n\n const deltaWidth = (availableWidth - headerWidth) / this.data.columns.length;\n\n this.data.columns.map(col => {\n const width = this.getColumnHeaderElement(col.colIndex).width();\n let finalWidth = width + deltaWidth - 16;\n\n if (this.addSerialNoColumn && col.colIndex === 0) {\n return;\n }\n\n this.setColumnHeaderWidth(col.colIndex, finalWidth);\n this.setColumnWidth(col.colIndex, finalWidth);\n });\n this.setBodyWidth();\n }\n\n setBodyWidth() {\n this.bodyScrollable.css(\n 'width',\n parseInt(this.header.css('width'), 10) + 1\n );\n }\n\n setStyle(rule, styleMap) {\n let styles = this.$style.text();\n\n styles = buildCSSRule(rule, styleMap, styles);\n this.$style.html(styles);\n }\n\n makeStyle() {\n this.$style = $('')\n .prependTo(this.wrapper);\n }\n\n getColumn(colIndex) {\n colIndex = +colIndex;\n return this.data.columns.find(col => col.colIndex === colIndex);\n }\n\n getRow(rowIndex) {\n rowIndex = +rowIndex;\n return this.data.rows.find(row => row[0].rowIndex === rowIndex);\n }\n\n getCell(rowIndex, colIndex) {\n rowIndex = +rowIndex;\n colIndex = +colIndex;\n return this.data.rows.find(row => row[0].rowIndex === rowIndex)[colIndex];\n }\n\n getColumnHeaderElement(colIndex) {\n colIndex = +colIndex;\n if (colIndex < 0) return null;\n return this.wrapper.find(\n `.data-table-col[data-is-header][data-col-index=\"${colIndex}\"]`\n );\n }\n\n getColumnMinWidth(colIndex) {\n colIndex = +colIndex;\n return this.minWidthMap && this.minWidthMap[colIndex];\n }\n\n getCellAttr($cell) {\n return $cell.data();\n }\n\n log() {\n if (this.enableLogs) {\n console.log.apply(console, arguments);\n }\n }\n}\n\n\n\n\n// WEBPACK FOOTER //\n// ./src/regrid.js","function camelCaseToDash(str) {\n return str.replace(/([A-Z])/g, (g) => `-${g[0].toLowerCase()}`);\n}\n\nfunction makeDataAttributeString(props) {\n const keys = Object.keys(props);\n\n return keys\n .map((key) => {\n const _key = camelCaseToDash(key);\n const val = props[key];\n\n if (val === undefined) return '';\n return `data-${_key}=\"${val}\" `;\n })\n .join('')\n .trim();\n}\n\nfunction getEditCellHTML() {\n return `\n \n \n
\n `;\n}\n\nfunction getColumnHTML(column) {\n const { rowIndex, colIndex, isHeader } = column;\n const dataAttr = makeDataAttributeString({\n rowIndex,\n colIndex,\n isHeader\n });\n\n const editCellHTML = isHeader ? '' : getEditCellHTML();\n\n return `\n \n \n ${column.format ? column.format(column.content) : column.content}\n \n \n ${editCellHTML}\n | \n `;\n}\n\nfunction getRowHTML(columns, props) {\n const dataAttr = makeDataAttributeString(props);\n\n return `\n \n ${columns.map(getColumnHTML).join('')}\n
\n `;\n}\n\nfunction getHeaderHTML(columns) {\n const $header = `\n \n ${getRowHTML(columns, { isHeader: 1, rowIndex: -1 })}\n \n `;\n\n // columns.map(col => {\n // if (!col.width) return;\n // const $cellContent = $header.find(\n // `.data-table-col[data-col-index=\"${col.colIndex}\"] .content`\n // );\n\n // $cellContent.width(col.width);\n // });\n\n return $header;\n}\n\nfunction getBodyHTML(rows) {\n return `\n \n ${rows.map(row => getRowHTML(row, { rowIndex: row[0].rowIndex })).join('')}\n \n `;\n}\n\nfunction prepareColumn(col, i) {\n if (typeof col === 'string') {\n col = {\n content: col\n };\n }\n return Object.assign(col, {\n colIndex: i\n });\n}\n\nfunction prepareColumns(columns, props = {}) {\n const _columns = columns.map(prepareColumn);\n\n return _columns.map(col => Object.assign(col, props));\n}\n\nfunction prepareRowHeader(columns) {\n return prepareColumns(columns, {\n rowIndex: -1,\n isHeader: 1,\n format: (content) => `${content}`\n });\n}\n\nfunction prepareRow(row, i) {\n return prepareColumns(row, {\n rowIndex: i\n });\n}\n\nfunction prepareRows(rows) {\n return rows.map(prepareRow);\n}\n\nfunction getDefault(a, b) {\n return a !== undefined ? a : b;\n}\n\nfunction escapeRegExp(str) {\n // https://stackoverflow.com/a/6969486\n return str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&');\n}\n\nfunction getCSSString(styleMap) {\n let style = '';\n\n for (const prop in styleMap) {\n if (styleMap.hasOwnProperty(prop)) {\n style += `${prop}: ${styleMap[prop]}; `;\n }\n }\n\n return style.trim();\n}\n\nfunction getCSSRuleBlock(rule, styleMap) {\n return `${rule} { ${getCSSString(styleMap)} }`;\n}\n\nfunction namespaceSelector(selector) {\n return '.data-table ' + selector;\n}\n\nfunction buildCSSRule(rule, styleMap, cssRulesString = '') {\n // build css rules efficiently,\n // append new rule if doesnt exist,\n // update existing ones\n\n const rulePatternStr = `${escapeRegExp(rule)} {([^}]*)}`;\n const rulePattern = new RegExp(rulePatternStr, 'g');\n\n if (cssRulesString && cssRulesString.match(rulePattern)) {\n for (const property in styleMap) {\n const value = styleMap[property];\n const propPattern = new RegExp(`${escapeRegExp(property)}:([^;]*);`);\n\n cssRulesString = cssRulesString.replace(rulePattern, function (match, propertyStr) {\n if (propertyStr.match(propPattern)) {\n // property exists, replace value with new value\n propertyStr = propertyStr.replace(propPattern, (match, valueStr) => {\n return `${property}: ${value};`;\n });\n }\n propertyStr = propertyStr.trim();\n\n const replacer =\n `${rule} { ${propertyStr} }`;\n\n return replacer;\n });\n }\n\n return cssRulesString;\n }\n // no match, append new rule block\n return `${cssRulesString}${getCSSRuleBlock(rule, styleMap)}`;\n}\n\nexport default {\n getHeaderHTML,\n getBodyHTML,\n getRowHTML,\n getColumnHTML,\n getEditCellHTML,\n prepareRowHeader,\n prepareRows,\n namespaceSelector,\n getCSSString,\n buildCSSRule,\n makeDataAttributeString,\n getDefault,\n escapeRegExp\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils.js","// style-loader: Adds some css to the DOM by adding a ')\n .prependTo(this.wrapper);\n }\n\n getColumn(colIndex) {\n colIndex = +colIndex;\n return this.data.columns.find(col => col.colIndex === colIndex);\n }\n\n getRow(rowIndex) {\n rowIndex = +rowIndex;\n return this.data.rows.find(row => row[0].rowIndex === rowIndex);\n }\n\n getCell(rowIndex, colIndex) {\n rowIndex = +rowIndex;\n colIndex = +colIndex;\n return this.data.rows.find(row => row[0].rowIndex === rowIndex)[colIndex];\n }\n\n getColumnHeaderElement(colIndex) {\n colIndex = +colIndex;\n if (colIndex < 0) return null;\n return this.wrapper.find(\n `.data-table-col[data-is-header][data-col-index=\"${colIndex}\"]`\n );\n }\n\n getColumnMinWidth(colIndex) {\n colIndex = +colIndex;\n return this.minWidthMap && this.minWidthMap[colIndex];\n }\n\n getCellAttr($cell) {\n return $cell.data();\n }\n\n log() {\n if (this.enableLogs) {\n console.log.apply(console, arguments);\n }\n }\n}\n\n\n\n\n// WEBPACK FOOTER //\n// ./src/regrid.js","function camelCaseToDash(str) {\n return str.replace(/([A-Z])/g, (g) => `-${g[0].toLowerCase()}`);\n}\n\nfunction makeDataAttributeString(props) {\n const keys = Object.keys(props);\n\n return keys\n .map((key) => {\n const _key = camelCaseToDash(key);\n const val = props[key];\n\n if (val === undefined) return '';\n return `data-${_key}=\"${val}\" `;\n })\n .join('')\n .trim();\n}\n\nfunction getEditCellHTML() {\n return `\n \n `;\n}\n\nfunction getColumnHTML(column) {\n const { rowIndex, colIndex, isHeader } = column;\n const dataAttr = makeDataAttributeString({\n rowIndex,\n colIndex,\n isHeader\n });\n\n const editCellHTML = isHeader ? '' : getEditCellHTML();\n\n return `\n \n \n ${column.format ? column.format(column.content) : column.content}\n \n \n ${editCellHTML}\n | \n `;\n}\n\nfunction getRowHTML(columns, props) {\n const dataAttr = makeDataAttributeString(props);\n\n return `\n \n ${columns.map(getColumnHTML).join('')}\n
\n `;\n}\n\nfunction getHeaderHTML(columns) {\n const $header = `\n \n ${getRowHTML(columns, { isHeader: 1, rowIndex: -1 })}\n \n `;\n\n // columns.map(col => {\n // if (!col.width) return;\n // const $cellContent = $header.find(\n // `.data-table-col[data-col-index=\"${col.colIndex}\"] .content`\n // );\n\n // $cellContent.width(col.width);\n // });\n\n return $header;\n}\n\nfunction getBodyHTML(rows) {\n return `\n \n ${rows.map(row => getRowHTML(row, { rowIndex: row[0].rowIndex })).join('')}\n \n `;\n}\n\nfunction prepareColumn(col, i) {\n if (typeof col === 'string') {\n col = {\n content: col\n };\n }\n return Object.assign(col, {\n colIndex: i\n });\n}\n\nfunction prepareColumns(columns, props = {}) {\n const _columns = columns.map(prepareColumn);\n\n return _columns.map(col => Object.assign(col, props));\n}\n\nfunction prepareRowHeader(columns) {\n return prepareColumns(columns, {\n rowIndex: -1,\n isHeader: 1,\n format: (content) => `${content}`\n });\n}\n\nfunction prepareRow(row, i) {\n return prepareColumns(row, {\n rowIndex: i\n });\n}\n\nfunction prepareRows(rows) {\n return rows.map(prepareRow);\n}\n\nfunction getDefault(a, b) {\n return a !== undefined ? a : b;\n}\n\nfunction escapeRegExp(str) {\n // https://stackoverflow.com/a/6969486\n return str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&');\n}\n\nfunction getCSSString(styleMap) {\n let style = '';\n\n for (const prop in styleMap) {\n if (styleMap.hasOwnProperty(prop)) {\n style += `${prop}: ${styleMap[prop]}; `;\n }\n }\n\n return style.trim();\n}\n\nfunction getCSSRuleBlock(rule, styleMap) {\n return `${rule} { ${getCSSString(styleMap)} }`;\n}\n\nfunction namespaceSelector(selector) {\n return '.data-table ' + selector;\n}\n\nfunction buildCSSRule(rule, styleMap, cssRulesString = '') {\n // build css rules efficiently,\n // append new rule if doesnt exist,\n // update existing ones\n\n const rulePatternStr = `${escapeRegExp(rule)} {([^}]*)}`;\n const rulePattern = new RegExp(rulePatternStr, 'g');\n\n if (cssRulesString && cssRulesString.match(rulePattern)) {\n for (const property in styleMap) {\n const value = styleMap[property];\n const propPattern = new RegExp(`${escapeRegExp(property)}:([^;]*);`);\n\n cssRulesString = cssRulesString.replace(rulePattern, function (match, propertyStr) {\n if (propertyStr.match(propPattern)) {\n // property exists, replace value with new value\n propertyStr = propertyStr.replace(propPattern, (match, valueStr) => {\n return `${property}: ${value};`;\n });\n }\n propertyStr = propertyStr.trim();\n\n const replacer =\n `${rule} { ${propertyStr} }`;\n\n return replacer;\n });\n }\n\n return cssRulesString;\n }\n // no match, append new rule block\n return `${cssRulesString}${getCSSRuleBlock(rule, styleMap)}`;\n}\n\nexport default {\n getHeaderHTML,\n getBodyHTML,\n getRowHTML,\n getColumnHTML,\n getEditCellHTML,\n prepareRowHeader,\n prepareRows,\n namespaceSelector,\n getCSSString,\n buildCSSRule,\n makeDataAttributeString,\n getDefault,\n escapeRegExp\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils.js","// style-loader: Adds some css to the DOM by adding a