diff --git a/lib/frappe-datatable.js b/lib/frappe-datatable.js
index 1e4b0a4..4b8d6de 100644
--- a/lib/frappe-datatable.js
+++ b/lib/frappe-datatable.js
@@ -84,11 +84,11 @@ Object.defineProperty(exports, "__esModule", {
value: true
});
-var _datatable = __webpack_require__(8);
+var _datatable = __webpack_require__(1);
var _datatable2 = _interopRequireDefault(_datatable);
-var _package = __webpack_require__(9);
+var _package = __webpack_require__(8);
var _package2 = _interopRequireDefault(_package);
@@ -100,7 +100,824 @@ exports.default = _datatable2.default;
module.exports = exports['default'];
/***/ }),
-/* 1 */,
+/* 1 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); /* globals $, Clusterize */
+
+
+var _utils = __webpack_require__(2);
+
+__webpack_require__(3);
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var DEFAULT_OPTIONS = {
+ events: null,
+ data: {
+ columns: [],
+ rows: []
+ },
+ editing: null,
+ addSerialNoColumn: true,
+ enableClusterize: true,
+ enableLogs: false,
+ addCheckbox: true
+};
+
+var DataTable = function () {
+ function DataTable(wrapper, options) {
+ _classCallCheck(this, DataTable);
+
+ this.wrapper = $(wrapper);
+ if (this.wrapper.length === 0) {
+ throw new Error('Invalid argument given for `wrapper`');
+ }
+
+ this.options = Object.assign({}, DEFAULT_OPTIONS, options);
+ this.events = this.options.events;
+
+ if (this.options.data) {
+ this.refresh(this.options.data);
+ }
+ }
+
+ _createClass(DataTable, [{
+ key: 'makeDom',
+ value: function makeDom() {
+ this.wrapper.html('\n
\n ');
+
+ this.header = this.wrapper.find('.data-table-header');
+ this.bodyScrollable = this.wrapper.find('.body-scrollable');
+ // this.body = this.wrapper.find('.data-table-body');
+ this.footer = this.wrapper.find('.data-table-footer');
+ }
+ }, {
+ key: 'refresh',
+ value: function refresh(data) {
+ this.data = this.prepareData(data);
+ this.render();
+ }
+ }, {
+ key: 'render',
+ value: function render() {
+ if (this.wrapper.find('.data-table').length === 0) {
+ this.makeDom();
+ this.makeStyle();
+ this.bindEvents();
+ }
+
+ this.renderHeader();
+ this.renderBody();
+ this.setDimensions();
+ }
+ }, {
+ key: 'renderHeader',
+ value: function renderHeader() {
+ // fixed header
+ this.header.html((0, _utils.getHeaderHTML)(this.data.columns));
+ }
+ }, {
+ key: 'renderBody',
+ value: function renderBody() {
+ if (this.options.enableClusterize) {
+ this.renderBodyWithClusterize();
+ } else {
+ this.renderBodyHTML();
+ }
+ }
+ }, {
+ key: 'renderBodyHTML',
+ value: function renderBodyHTML() {
+ // scrollable body
+ this.bodyScrollable.html('\n \n ' + (0, _utils.getBodyHTML)(this.data.rows) + '\n
\n ');
+ }
+ }, {
+ key: 'renderBodyWithClusterize',
+ value: function renderBodyWithClusterize() {
+ // empty body
+ this.bodyScrollable.html('\n \n ' + (0, _utils.getBodyHTML)([]) + '\n
\n ');
+
+ this.start = 0;
+ this.pageLength = 1000;
+ this.end = this.start + this.pageLength;
+
+ var initialData = this.getDataForClusterize(
+ // only append ${this.pageLength} rows in the beginning
+ // defer remaining rows
+ this.data.rows.slice(this.start, this.end));
+
+ var self = this;
+
+ this.clusterize = new Clusterize({
+ rows: initialData,
+ scrollElem: this.bodyScrollable.get(0),
+ contentElem: this.bodyScrollable.find('tbody').get(0),
+ callbacks: {
+ clusterChanged: function clusterChanged() {
+ self.highlightCheckedRows();
+ }
+ }
+ });
+ this.log('dataAppended', this.pageLength);
+ this.appendRemainingData();
+ }
+ }, {
+ key: 'appendRemainingData',
+ value: function appendRemainingData() {
+ var dataAppended = this.pageLength;
+ var promises = [];
+
+ while (dataAppended + this.pageLength < this.data.rows.length) {
+ this.start = this.end;
+ this.end = this.start + this.pageLength;
+ promises.push(this.appendNextPagePromise(this.start, this.end));
+ dataAppended += this.pageLength;
+ }
+
+ if (this.data.rows.length % this.pageLength > 0) {
+ // last page
+ this.start = this.end;
+ this.end = this.start + this.pageLength;
+ promises.push(this.appendNextPagePromise(this.start, this.end));
+ }
+
+ return promises.reduce(function (prev, cur) {
+ return prev.then(cur);
+ }, Promise.resolve());
+ }
+ }, {
+ key: 'appendNextPagePromise',
+ value: function appendNextPagePromise(start, end) {
+ var _this = this;
+
+ return new Promise(function (resolve) {
+ setTimeout(function () {
+ var rows = _this.data.rows.slice(start, end);
+ var data = _this.getDataForClusterize(rows);
+
+ _this.clusterize.append(data);
+ _this.log('dataAppended', rows.length);
+ resolve();
+ }, 0);
+ });
+ }
+ }, {
+ key: 'getDataForClusterize',
+ value: function getDataForClusterize(rows) {
+ return rows.map(function (row) {
+ return (0, _utils.getRowHTML)(row, { rowIndex: row[0].rowIndex });
+ });
+ }
+ }, {
+ key: 'updateCell',
+ value: function updateCell(rowIndex, colIndex, value) {
+ var cell = this.getCell(rowIndex, colIndex);
+
+ cell.content = value;
+ this.refreshCell(cell);
+ }
+ }, {
+ key: 'refreshRows',
+ value: function refreshRows() {
+ this.renderBody();
+ this.setDimensions();
+ }
+ }, {
+ key: 'refreshCell',
+ value: function refreshCell(cell) {
+ var selector = '.data-table-col[data-row-index="' + cell.rowIndex + '"][data-col-index="' + cell.colIndex + '"]';
+ var $cell = this.bodyScrollable.find(selector);
+ var $newCell = $((0, _utils.getColumnHTML)(cell));
+
+ $cell.replaceWith($newCell);
+ }
+ }, {
+ key: 'prepareData',
+ value: function prepareData(data) {
+ // cache original data passed
+ this._data = data;
+ var columns = data.columns,
+ rows = data.rows;
+
+
+ if (this.options.addSerialNoColumn) {
+ var serialNoColumn = {
+ content: 'Sr. No',
+ resizable: false
+ };
+
+ columns.unshift(serialNoColumn);
+
+ rows = rows.map(function (row, i) {
+ var val = i + 1 + '';
+
+ return [val].concat(row);
+ });
+ }
+
+ if (this.options.addCheckbox) {
+ var addCheckboxColumn = {
+ content: '',
+ resizable: false,
+ sortable: false,
+ editable: false
+ };
+
+ columns.unshift(addCheckboxColumn);
+
+ rows = rows.map(function (row, i) {
+ // make copy of object, else it will be mutated
+ var val = Object.assign({}, addCheckboxColumn);
+
+ return [val].concat(row);
+ });
+ }
+
+ var _columns = (0, _utils.prepareRowHeader)(columns);
+ var _rows = (0, _utils.prepareRows)(rows);
+
+ return {
+ columns: _columns,
+ rows: _rows
+ };
+ }
+ }, {
+ key: 'bindEvents',
+ value: function bindEvents() {
+ this.bindFocusCell();
+ this.bindEditCell();
+ this.bindResizeColumn();
+ this.bindSortColumn();
+ this.bindCheckbox();
+ }
+ }, {
+ key: 'setDimensions',
+ value: function setDimensions() {
+ var self = this;
+
+ // setting width as 0 will ensure that the
+ // header doesn't take the available space
+ this.header.css({
+ width: 0,
+ margin: 0
+ });
+
+ // cache minWidth for each column
+ this.minWidthMap = (0, _utils.getDefault)(this.minWidthMap, []);
+ this.header.find('.data-table-col').each(function () {
+ var col = $(this);
+ var width = parseInt(col.find('.content').css('width'), 10);
+ var colIndex = col.attr('data-col-index');
+
+ if (!self.minWidthMap[colIndex]) {
+ // only set this once
+ self.minWidthMap[colIndex] = width;
+ }
+ });
+
+ // set initial width as naturally calculated by table's first row
+ this.bodyScrollable.find('.data-table-row[data-row-index="0"] .data-table-col').each(function () {
+ var $cell = $(this);
+ var width = parseInt($cell.find('.content').css('width'), 10);
+ var height = parseInt($cell.find('.content').css('height'), 10);
+
+ var _self$getCellAttr = self.getCellAttr($cell),
+ colIndex = _self$getCellAttr.colIndex;
+
+ var minWidth = self.getColumnMinWidth(colIndex);
+
+ if (width < minWidth) {
+ width = minWidth;
+ }
+ self.setColumnWidth(colIndex, width);
+ self.setDefaultCellHeight(height);
+ });
+
+ this.setBodyWidth();
+
+ this.setStyle('.data-table .body-scrollable', {
+ 'margin-top': this.header.height() + 1 + 'px'
+ });
+
+ // hide edit cells by default
+ this.setStyle('.data-table .body-scrollable .edit-cell', {
+ display: 'none'
+ });
+
+ this.bodyScrollable.find('.table').css('margin', 0);
+ }
+ }, {
+ key: 'bindFocusCell',
+ value: function bindFocusCell() {
+ var self = this;
+
+ this.$focusedCell = null;
+ this.bodyScrollable.on('click', '.data-table-col', function () {
+ var $cell = $(this);
+
+ var _self$getCellAttr2 = self.getCellAttr($cell),
+ colIndex = _self$getCellAttr2.colIndex;
+
+ if (self.options.addCheckbox && colIndex === 0) {
+ return;
+ }
+
+ self.$focusedCell = $cell;
+ self.bodyScrollable.find('.data-table-col').removeClass('selected');
+ $cell.addClass('selected');
+ });
+ }
+ }, {
+ key: 'bindEditCell',
+ value: function bindEditCell() {
+ var _this2 = this;
+
+ var self = this;
+
+ this.$editingCell = null;
+ this.bodyScrollable.on('dblclick', '.data-table-col', function () {
+ self.activateEditing($(this));
+ });
+
+ $(document.body).on('keypress', function (e) {
+ // enter keypress on focused cell
+ if (e.which === 13 && _this2.$focusedCell && !_this2.$editingCell) {
+ _this2.log('editingCell');
+ _this2.activateEditing(_this2.$focusedCell);
+ e.stopImmediatePropagation();
+ }
+ });
+
+ $(document.body).on('keypress', function (e) {
+ // enter keypress on editing cell
+ if (e.which === 13 && _this2.$editingCell) {
+ _this2.log('submitCell');
+ _this2.submitEditing(_this2.$editingCell);
+ e.stopImmediatePropagation();
+ }
+ });
+
+ $(document.body).on('click', function (e) {
+ if ($(e.target).is('.edit-cell, .edit-cell *')) return;
+ self.bodyScrollable.find('.edit-cell').hide();
+ _this2.$editingCell = null;
+ });
+ }
+ }, {
+ key: 'activateEditing',
+ value: function activateEditing($cell) {
+ var _getCellAttr = this.getCellAttr($cell),
+ rowIndex = _getCellAttr.rowIndex,
+ colIndex = _getCellAttr.colIndex;
+
+ var col = this.getColumn(colIndex);
+
+ if (col && col.editable === false) {
+ return;
+ }
+
+ 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;
+ var $editCell = $cell.find('.edit-cell').empty();
+ var cell = this.getCell(rowIndex, colIndex);
+ var editing = this.getEditingObject(colIndex, rowIndex, cell.content, $editCell);
+
+ if (editing) {
+ this.currentCellEditing = editing;
+ // initialize editing input with cell value
+ editing.initValue(cell.content);
+ $editCell.show();
+ }
+ }
+ }, {
+ key: 'getEditingObject',
+ value: function getEditingObject(colIndex, rowIndex, value, parent) {
+ if (this.options.editing) {
+ return this.options.editing(colIndex, rowIndex, value, parent);
+ }
+
+ // editing fallback
+ var $input = $('');
+
+ parent.append($input);
+
+ return {
+ initValue: function initValue(value) {
+ return $input.val(value);
+ },
+ getValue: function getValue() {
+ return $input.val();
+ },
+ setValue: function setValue(value) {
+ return $input.val(value);
+ }
+ };
+ }
+ }, {
+ key: 'submitEditing',
+ value: function submitEditing($cell) {
+ var _this3 = this;
+
+ var _getCellAttr3 = this.getCellAttr($cell),
+ rowIndex = _getCellAttr3.rowIndex,
+ colIndex = _getCellAttr3.colIndex;
+
+ if ($cell) {
+ var editing = this.currentCellEditing;
+
+ if (editing) {
+ var value = editing.getValue();
+ var done = editing.setValue(value);
+
+ if (done && done.then) {
+ // wait for promise then update internal state
+ done.then(function () {
+ return _this3.updateCell(rowIndex, colIndex, value);
+ });
+ } else {
+ this.updateCell(rowIndex, colIndex, value);
+ }
+ }
+ }
+
+ this.currentCellEditing = null;
+ }
+ }, {
+ key: 'bindResizeColumn',
+ value: function bindResizeColumn() {
+ var self = this;
+ var isDragging = false;
+ var $currCell = void 0,
+ startWidth = void 0,
+ startX = void 0;
+
+ this.header.on('mousedown', '.data-table-col', function (e) {
+ $currCell = $(this);
+ var colIndex = $currCell.attr('data-col-index');
+ var col = self.getColumn(colIndex);
+
+ if (col && col.resizable === false) {
+ return;
+ }
+
+ isDragging = true;
+ startWidth = $currCell.find('.content').width();
+ startX = e.pageX;
+ });
+
+ $('body').on('mouseup', function (e) {
+ if (!$currCell) return;
+ isDragging = false;
+ var colIndex = $currCell.attr('data-col-index');
+
+ if ($currCell) {
+ var width = parseInt($currCell.find('.content').css('width'), 10);
+
+ self.setColumnWidth(colIndex, width);
+ self.setBodyWidth();
+ $currCell = null;
+ }
+ });
+
+ $('body').on('mousemove', function (e) {
+ if (!isDragging) return;
+ var finalWidth = startWidth + (e.pageX - startX);
+ var colIndex = $currCell.attr('data-col-index');
+
+ if (self.getColumnMinWidth(colIndex) > finalWidth) {
+ // don't resize past minWidth
+ return;
+ }
+
+ self.setColumnHeaderWidth(colIndex, finalWidth);
+ });
+ }
+ }, {
+ key: 'bindSortColumn',
+ value: function bindSortColumn() {
+ var self = this;
+
+ this.header.on('click', '.data-table-col .content span', function () {
+ var $cell = $(this).closest('.data-table-col');
+ var sortAction = (0, _utils.getDefault)($cell.attr('data-sort-action'), 'none');
+ var colIndex = $cell.attr('data-col-index');
+ var col = self.getColumn(colIndex);
+
+ if (col && col.sortable === false) {
+ return;
+ }
+
+ // reset sort indicator
+ self.header.find('.sort-indicator').text('');
+ self.header.find('.data-table-col').attr('data-sort-action', 'none');
+
+ if (sortAction === 'none') {
+ $cell.attr('data-sort-action', 'asc');
+ $cell.find('.sort-indicator').text('▲');
+ } else if (sortAction === 'asc') {
+ $cell.attr('data-sort-action', 'desc');
+ $cell.find('.sort-indicator').text('▼');
+ } else if (sortAction === 'desc') {
+ $cell.attr('data-sort-action', 'none');
+ $cell.find('.sort-indicator').text('');
+ }
+
+ // sortWith this action
+ var sortWith = $cell.attr('data-sort-action');
+
+ if (self.events && self.events.onSort) {
+ self.events.onSort(colIndex, sortWith);
+ } else {
+ self.sortRows(colIndex, sortWith);
+ self.refreshRows();
+ }
+ });
+ }
+ }, {
+ key: 'sortRows',
+ value: function sortRows(colIndex) {
+ var sortAction = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'none';
+
+ colIndex = +colIndex;
+
+ this.data.rows.sort(function (a, b) {
+ var _aIndex = a[0].rowIndex;
+ var _bIndex = b[0].rowIndex;
+ var _a = a[colIndex].content;
+ var _b = b[colIndex].content;
+
+ if (sortAction === 'none') {
+ return _aIndex - _bIndex;
+ } else if (sortAction === 'asc') {
+ if (_a < _b) return -1;
+ if (_a > _b) return 1;
+ if (_a === _b) return 0;
+ } else if (sortAction === 'desc') {
+ if (_a < _b) return 1;
+ if (_a > _b) return -1;
+ if (_a === _b) return 0;
+ }
+ return 0;
+ });
+ }
+ }, {
+ key: 'bindCheckbox',
+ value: function bindCheckbox() {
+ if (!this.options.addCheckbox) return;
+ var self = this;
+
+ // map of checked rows
+ this.checkMap = [];
+
+ this.wrapper.on('click', '.data-table-col[data-col-index="0"] [type="checkbox"]', function () {
+ var $checkbox = $(this);
+ var $cell = $checkbox.closest('.data-table-col');
+
+ var _self$getCellAttr3 = self.getCellAttr($cell),
+ rowIndex = _self$getCellAttr3.rowIndex,
+ isHeader = _self$getCellAttr3.isHeader;
+
+ var checked = $checkbox.is(':checked');
+
+ if (isHeader) {
+ self.checkAll(checked);
+ } else {
+ self.checkRow(rowIndex, checked);
+ }
+ });
+ }
+ }, {
+ key: 'getCheckedRows',
+ value: function getCheckedRows() {
+ return this.checkMap.map(function (c, rowIndex) {
+ if (c) {
+ return rowIndex;
+ }
+ return null;
+ }).filter(function (c) {
+ return c !== null || c !== undefined;
+ });
+ }
+ }, {
+ key: 'highlightCheckedRows',
+ value: function highlightCheckedRows() {
+ var _this4 = this;
+
+ this.getCheckedRows().map(function (rowIndex) {
+ return _this4.checkRow(rowIndex, true);
+ });
+ }
+ }, {
+ key: 'checkRow',
+ value: function checkRow(rowIndex, toggle) {
+ var value = toggle ? 1 : 0;
+
+ // update internal map
+ this.checkMap[rowIndex] = value;
+ // set checkbox value explicitly
+ this.bodyScrollable.find('.data-table-col[data-row-index="' + rowIndex + '"][data-col-index="0"] [type="checkbox"]').prop('checked', toggle);
+ // highlight row
+ this.highlightRow(rowIndex, toggle);
+ }
+ }, {
+ key: 'checkAll',
+ value: function checkAll(toggle) {
+ var value = toggle ? 1 : 0;
+
+ // update internal map
+ if (toggle) {
+ this.checkMap = Array.from(Array(this.getTotalRows())).map(function (c) {
+ return value;
+ });
+ } else {
+ this.checkMap = [];
+ }
+ // set checkbox value
+ this.bodyScrollable.find('.data-table-col[data-col-index="0"] [type="checkbox"]').prop('checked', toggle);
+ // highlight all
+ this.highlightAll(toggle);
+ }
+ }, {
+ key: 'highlightRow',
+ value: function highlightRow(rowIndex) {
+ var toggle = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
+
+ var $row = this.bodyScrollable.find('.data-table-row[data-row-index="' + rowIndex + '"]');
+
+ if (toggle) {
+ $row.addClass('row-highlight');
+ } else {
+ $row.removeClass('row-highlight');
+ }
+ }
+ }, {
+ key: 'highlightAll',
+ value: function highlightAll() {
+ var toggle = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
+
+ this.bodyScrollable.find('.data-table-row').toggleClass('row-highlight', toggle);
+ }
+ }, {
+ key: 'setColumnWidth',
+ value: function setColumnWidth(colIndex, width) {
+ // set width for content
+ this.setStyle('[data-col-index="' + colIndex + '"] .content', {
+ width: width + 'px'
+ });
+ // set width for edit cell
+ this.setStyle('[data-col-index="' + colIndex + '"] .edit-cell', {
+ width: width + 'px'
+ });
+ }
+ }, {
+ key: 'setColumnHeaderWidth',
+ value: function setColumnHeaderWidth(colIndex, width) {
+ this.setStyle('[data-col-index="' + colIndex + '"][data-is-header] .content', {
+ width: width + 'px'
+ });
+ }
+ }, {
+ key: 'setDefaultCellHeight',
+ value: function setDefaultCellHeight(height) {
+ this.setStyle('.data-table-col .content', {
+ height: height + 'px'
+ });
+ }
+ }, {
+ key: 'setRowHeight',
+ value: function setRowHeight(rowIndex, height) {
+ this.setStyle('[data-row-index="' + rowIndex + '"] .content', {
+ height: height + 'px'
+ });
+ }
+ }, {
+ key: 'setColumnWidths',
+ value: function setColumnWidths() {
+ var _this5 = this;
+
+ var availableWidth = this.wrapper.width();
+ var headerWidth = this.header.width();
+
+ if (headerWidth > availableWidth) {
+ // don't resize, horizontal scroll takes place
+ return;
+ }
+
+ var deltaWidth = (availableWidth - headerWidth) / this.data.columns.length;
+
+ this.data.columns.map(function (col) {
+ var width = _this5.getColumnHeaderElement(col.colIndex).width();
+ var finalWidth = width + deltaWidth - 16;
+
+ if (_this5.options.addSerialNoColumn && col.colIndex === 0) {
+ return;
+ }
+
+ _this5.setColumnHeaderWidth(col.colIndex, finalWidth);
+ _this5.setColumnWidth(col.colIndex, finalWidth);
+ });
+ this.setBodyWidth();
+ }
+ }, {
+ key: 'setBodyWidth',
+ value: function setBodyWidth() {
+ this.bodyScrollable.css('width', parseInt(this.header.css('width'), 10) + 1);
+ }
+ }, {
+ key: 'setStyle',
+ value: function setStyle(rule, styleMap) {
+ var styles = this.$style.text();
+
+ styles = (0, _utils.buildCSSRule)(rule, styleMap, styles);
+ this.$style.html(styles);
+ }
+ }, {
+ key: 'makeStyle',
+ value: function makeStyle() {
+ this.$style = $('').prependTo(this.wrapper);
+ }
+ }, {
+ key: 'getColumn',
+ value: function getColumn(colIndex) {
+ colIndex = +colIndex;
+ return this.data.columns.find(function (col) {
+ return col.colIndex === colIndex;
+ });
+ }
+ }, {
+ key: 'getRow',
+ value: function getRow(rowIndex) {
+ rowIndex = +rowIndex;
+ return this.data.rows.find(function (row) {
+ return row[0].rowIndex === rowIndex;
+ });
+ }
+ }, {
+ key: 'getCell',
+ value: function getCell(rowIndex, colIndex) {
+ rowIndex = +rowIndex;
+ colIndex = +colIndex;
+ return this.data.rows.find(function (row) {
+ return row[0].rowIndex === rowIndex;
+ })[colIndex];
+ }
+ }, {
+ key: 'getColumnHeaderElement',
+ value: function getColumnHeaderElement(colIndex) {
+ colIndex = +colIndex;
+ if (colIndex < 0) return null;
+ return this.wrapper.find('.data-table-col[data-is-header][data-col-index="' + colIndex + '"]');
+ }
+ }, {
+ key: 'getColumnMinWidth',
+ value: function getColumnMinWidth(colIndex) {
+ colIndex = +colIndex;
+ return this.minWidthMap && this.minWidthMap[colIndex];
+ }
+ }, {
+ key: 'getCellAttr',
+ value: function getCellAttr($cell) {
+ return $cell.data();
+ }
+ }, {
+ key: 'getTotalRows',
+ value: function getTotalRows() {
+ return this.data.rows.length;
+ }
+ }, {
+ key: 'log',
+ value: function log() {
+ if (this.options.enableLogs) {
+ console.log.apply(console, arguments);
+ }
+ }
+ }]);
+
+ return DataTable;
+}();
+
+exports.default = DataTable;
+module.exports = exports['default'];
+
+/***/ }),
/* 2 */
/***/ (function(module, exports, __webpack_require__) {
@@ -885,819 +1702,6 @@ module.exports = function (css) {
/***/ }),
/* 8 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); /* globals $, Clusterize */
-
-
-var _utils = __webpack_require__(2);
-
-__webpack_require__(3);
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-var DEFAULT_OPTIONS = {
- events: null,
- data: {
- columns: [],
- rows: []
- },
- editing: null,
- addSerialNoColumn: true,
- enableClusterize: true,
- enableLogs: false,
- addCheckbox: true
-};
-
-var DataTable = function () {
- function DataTable(wrapper, options) {
- _classCallCheck(this, DataTable);
-
- this.wrapper = $(wrapper);
- if (this.wrapper.length === 0) {
- throw new Error('Invalid argument given for `wrapper`');
- }
-
- this.options = Object.assign({}, DEFAULT_OPTIONS, options);
- this.events = this.options.events;
-
- if (this.options.data) {
- this.refresh(this.options.data);
- }
- }
-
- _createClass(DataTable, [{
- key: 'makeDom',
- value: function makeDom() {
- this.wrapper.html('\n \n ');
-
- this.header = this.wrapper.find('.data-table-header');
- this.bodyScrollable = this.wrapper.find('.body-scrollable');
- // this.body = this.wrapper.find('.data-table-body');
- this.footer = this.wrapper.find('.data-table-footer');
- }
- }, {
- key: 'refresh',
- value: function refresh(data) {
- this.data = this.prepareData(data);
- this.render();
- }
- }, {
- key: 'render',
- value: function render() {
- if (this.wrapper.find('.data-table').length === 0) {
- this.makeDom();
- this.makeStyle();
- this.bindEvents();
- }
-
- this.renderHeader();
- this.renderBody();
- this.setDimensions();
- }
- }, {
- key: 'renderHeader',
- value: function renderHeader() {
- // fixed header
- this.header.html((0, _utils.getHeaderHTML)(this.data.columns));
- }
- }, {
- key: 'renderBody',
- value: function renderBody() {
- if (this.options.enableClusterize) {
- this.renderBodyWithClusterize();
- } else {
- this.renderBodyHTML();
- }
- }
- }, {
- key: 'renderBodyHTML',
- value: function renderBodyHTML() {
- // scrollable body
- this.bodyScrollable.html('\n \n ' + (0, _utils.getBodyHTML)(this.data.rows) + '\n
\n ');
- }
- }, {
- key: 'renderBodyWithClusterize',
- value: function renderBodyWithClusterize() {
- // empty body
- this.bodyScrollable.html('\n \n ' + (0, _utils.getBodyHTML)([]) + '\n
\n ');
-
- this.start = 0;
- this.pageLength = 1000;
- this.end = this.start + this.pageLength;
-
- var initialData = this.getDataForClusterize(
- // only append ${this.pageLength} rows in the beginning
- // defer remaining rows
- this.data.rows.slice(this.start, this.end));
-
- var self = this;
-
- this.clusterize = new Clusterize({
- rows: initialData,
- scrollElem: this.bodyScrollable.get(0),
- contentElem: this.bodyScrollable.find('tbody').get(0),
- callbacks: {
- clusterChanged: function clusterChanged() {
- self.highlightCheckedRows();
- }
- }
- });
- this.log('dataAppended', this.pageLength);
- this.appendRemainingData();
- }
- }, {
- key: 'appendRemainingData',
- value: function appendRemainingData() {
- var dataAppended = this.pageLength;
- var promises = [];
-
- while (dataAppended + this.pageLength < this.data.rows.length) {
- this.start = this.end;
- this.end = this.start + this.pageLength;
- promises.push(this.appendNextPagePromise(this.start, this.end));
- dataAppended += this.pageLength;
- }
-
- if (this.data.rows.length % this.pageLength > 0) {
- // last page
- this.start = this.end;
- this.end = this.start + this.pageLength;
- promises.push(this.appendNextPagePromise(this.start, this.end));
- }
-
- return promises.reduce(function (prev, cur) {
- return prev.then(cur);
- }, Promise.resolve());
- }
- }, {
- key: 'appendNextPagePromise',
- value: function appendNextPagePromise(start, end) {
- var _this = this;
-
- return new Promise(function (resolve) {
- setTimeout(function () {
- var rows = _this.data.rows.slice(start, end);
- var data = _this.getDataForClusterize(rows);
-
- _this.clusterize.append(data);
- _this.log('dataAppended', rows.length);
- resolve();
- }, 0);
- });
- }
- }, {
- key: 'getDataForClusterize',
- value: function getDataForClusterize(rows) {
- return rows.map(function (row) {
- return (0, _utils.getRowHTML)(row, { rowIndex: row[0].rowIndex });
- });
- }
- }, {
- key: 'updateCell',
- value: function updateCell(rowIndex, colIndex, value) {
- var cell = this.getCell(rowIndex, colIndex);
-
- cell.content = value;
- this.refreshCell(cell);
- }
- }, {
- key: 'refreshRows',
- value: function refreshRows() {
- this.renderBody();
- this.setDimensions();
- }
- }, {
- key: 'refreshCell',
- value: function refreshCell(cell) {
- var selector = '.data-table-col[data-row-index="' + cell.rowIndex + '"][data-col-index="' + cell.colIndex + '"]';
- var $cell = this.bodyScrollable.find(selector);
- var $newCell = $((0, _utils.getColumnHTML)(cell));
-
- $cell.replaceWith($newCell);
- }
- }, {
- key: 'prepareData',
- value: function prepareData(data) {
- // cache original data passed
- this._data = data;
- var columns = data.columns,
- rows = data.rows;
-
-
- if (this.options.addSerialNoColumn) {
- var serialNoColumn = {
- content: 'Sr. No',
- resizable: false
- };
-
- columns.unshift(serialNoColumn);
-
- rows = rows.map(function (row, i) {
- var val = i + 1 + '';
-
- return [val].concat(row);
- });
- }
-
- if (this.options.addCheckbox) {
- var addCheckboxColumn = {
- content: '',
- resizable: false,
- sortable: false,
- editable: false
- };
-
- columns.unshift(addCheckboxColumn);
-
- rows = rows.map(function (row, i) {
- // make copy of object, else it will be mutated
- var val = Object.assign({}, addCheckboxColumn);
-
- return [val].concat(row);
- });
- }
-
- var _columns = (0, _utils.prepareRowHeader)(columns);
- var _rows = (0, _utils.prepareRows)(rows);
-
- return {
- columns: _columns,
- rows: _rows
- };
- }
- }, {
- key: 'bindEvents',
- value: function bindEvents() {
- this.bindFocusCell();
- this.bindEditCell();
- this.bindResizeColumn();
- this.bindSortColumn();
- this.bindCheckbox();
- }
- }, {
- key: 'setDimensions',
- value: function setDimensions() {
- var self = this;
-
- // setting width as 0 will ensure that the
- // header doesn't take the available space
- this.header.css({
- width: 0,
- margin: 0
- });
-
- // cache minWidth for each column
- this.minWidthMap = (0, _utils.getDefault)(this.minWidthMap, []);
- this.header.find('.data-table-col').each(function () {
- var col = $(this);
- var width = parseInt(col.find('.content').css('width'), 10);
- var colIndex = col.attr('data-col-index');
-
- if (!self.minWidthMap[colIndex]) {
- // only set this once
- self.minWidthMap[colIndex] = width;
- }
- });
-
- // set initial width as naturally calculated by table's first row
- this.bodyScrollable.find('.data-table-row[data-row-index="0"] .data-table-col').each(function () {
- var $cell = $(this);
- var width = parseInt($cell.find('.content').css('width'), 10);
- var height = parseInt($cell.find('.content').css('height'), 10);
-
- var _self$getCellAttr = self.getCellAttr($cell),
- colIndex = _self$getCellAttr.colIndex;
-
- self.setColumnWidth(colIndex, width);
- self.setDefaultCellHeight(height);
- });
-
- this.setBodyWidth();
-
- this.setStyle('.data-table .body-scrollable', {
- 'margin-top': this.header.height() + 1 + 'px'
- });
-
- // hide edit cells by default
- this.setStyle('.data-table .body-scrollable .edit-cell', {
- display: 'none'
- });
-
- this.bodyScrollable.find('.table').css('margin', 0);
- }
- }, {
- key: 'bindFocusCell',
- value: function bindFocusCell() {
- var self = this;
-
- this.$focusedCell = null;
- this.bodyScrollable.on('click', '.data-table-col', function () {
- var $cell = $(this);
-
- var _self$getCellAttr2 = self.getCellAttr($cell),
- colIndex = _self$getCellAttr2.colIndex;
-
- if (self.options.addCheckbox && colIndex === 0) {
- return;
- }
-
- self.$focusedCell = $cell;
- self.bodyScrollable.find('.data-table-col').removeClass('selected');
- $cell.addClass('selected');
- });
- }
- }, {
- key: 'bindEditCell',
- value: function bindEditCell() {
- var _this2 = this;
-
- var self = this;
-
- this.$editingCell = null;
- this.bodyScrollable.on('dblclick', '.data-table-col', function () {
- self.activateEditing($(this));
- });
-
- $(document.body).on('keypress', function (e) {
- // enter keypress on focused cell
- if (e.which === 13 && _this2.$focusedCell && !_this2.$editingCell) {
- _this2.log('editingCell');
- _this2.activateEditing(_this2.$focusedCell);
- e.stopImmediatePropagation();
- }
- });
-
- $(document.body).on('keypress', function (e) {
- // enter keypress on editing cell
- if (e.which === 13 && _this2.$editingCell) {
- _this2.log('submitCell');
- _this2.submitEditing(_this2.$editingCell);
- e.stopImmediatePropagation();
- }
- });
-
- $(document.body).on('click', function (e) {
- if ($(e.target).is('.edit-cell, .edit-cell *')) return;
- self.bodyScrollable.find('.edit-cell').hide();
- _this2.$editingCell = null;
- });
- }
- }, {
- key: 'activateEditing',
- value: function activateEditing($cell) {
- var _getCellAttr = this.getCellAttr($cell),
- rowIndex = _getCellAttr.rowIndex,
- colIndex = _getCellAttr.colIndex;
-
- var col = this.getColumn(colIndex);
-
- if (col && col.editable === false) {
- return;
- }
-
- 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;
- var $editCell = $cell.find('.edit-cell').empty();
- var cell = this.getCell(rowIndex, colIndex);
- var editing = this.getEditingObject(colIndex, rowIndex, cell.content, $editCell);
-
- if (editing) {
- this.currentCellEditing = editing;
- // initialize editing input with cell value
- editing.initValue(cell.content);
- $editCell.show();
- }
- }
- }, {
- key: 'getEditingObject',
- value: function getEditingObject(colIndex, rowIndex, value, parent) {
- if (this.options.editing) {
- return this.options.editing(colIndex, rowIndex, value, parent);
- }
-
- // editing fallback
- var $input = $('');
-
- parent.append($input);
-
- return {
- initValue: function initValue(value) {
- return $input.val(value);
- },
- getValue: function getValue() {
- return $input.val();
- },
- setValue: function setValue(value) {
- return $input.val(value);
- }
- };
- }
- }, {
- key: 'submitEditing',
- value: function submitEditing($cell) {
- var _this3 = this;
-
- var _getCellAttr3 = this.getCellAttr($cell),
- rowIndex = _getCellAttr3.rowIndex,
- colIndex = _getCellAttr3.colIndex;
-
- if ($cell) {
- var editing = this.currentCellEditing;
-
- if (editing) {
- var value = editing.getValue();
- var done = editing.setValue(value);
-
- if (done && done.then) {
- // wait for promise then update internal state
- done.then(function () {
- return _this3.updateCell(rowIndex, colIndex, value);
- });
- } else {
- this.updateCell(rowIndex, colIndex, value);
- }
- }
- }
-
- this.currentCellEditing = null;
- }
- }, {
- key: 'bindResizeColumn',
- value: function bindResizeColumn() {
- var self = this;
- var isDragging = false;
- var $currCell = void 0,
- startWidth = void 0,
- startX = void 0;
-
- this.header.on('mousedown', '.data-table-col', function (e) {
- $currCell = $(this);
- var colIndex = $currCell.attr('data-col-index');
- var col = self.getColumn(colIndex);
-
- if (col && col.resizable === false) {
- return;
- }
-
- isDragging = true;
- startWidth = $currCell.find('.content').width();
- startX = e.pageX;
- });
-
- $('body').on('mouseup', function (e) {
- if (!$currCell) return;
- isDragging = false;
- var colIndex = $currCell.attr('data-col-index');
-
- if ($currCell) {
- var width = parseInt($currCell.find('.content').css('width'), 10);
-
- self.setColumnWidth(colIndex, width);
- self.setBodyWidth();
- $currCell = null;
- }
- });
-
- $('body').on('mousemove', function (e) {
- if (!isDragging) return;
- var finalWidth = startWidth + (e.pageX - startX);
- var colIndex = $currCell.attr('data-col-index');
-
- if (self.getColumnMinWidth(colIndex) > finalWidth) {
- // don't resize past minWidth
- return;
- }
-
- self.setColumnHeaderWidth(colIndex, finalWidth);
- });
- }
- }, {
- key: 'bindSortColumn',
- value: function bindSortColumn() {
- var self = this;
-
- this.header.on('click', '.data-table-col .content span', function () {
- var $cell = $(this).closest('.data-table-col');
- var sortAction = (0, _utils.getDefault)($cell.attr('data-sort-action'), 'none');
- var colIndex = $cell.attr('data-col-index');
- var col = self.getColumn(colIndex);
-
- if (col && col.sortable === false) {
- return;
- }
-
- // reset sort indicator
- self.header.find('.sort-indicator').text('');
- self.header.find('.data-table-col').attr('data-sort-action', 'none');
-
- if (sortAction === 'none') {
- $cell.attr('data-sort-action', 'asc');
- $cell.find('.sort-indicator').text('▲');
- } else if (sortAction === 'asc') {
- $cell.attr('data-sort-action', 'desc');
- $cell.find('.sort-indicator').text('▼');
- } else if (sortAction === 'desc') {
- $cell.attr('data-sort-action', 'none');
- $cell.find('.sort-indicator').text('');
- }
-
- // sortWith this action
- var sortWith = $cell.attr('data-sort-action');
-
- if (self.events && self.events.onSort) {
- self.events.onSort(colIndex, sortWith);
- } else {
- self.sortRows(colIndex, sortWith);
- self.refreshRows();
- }
- });
- }
- }, {
- key: 'sortRows',
- value: function sortRows(colIndex) {
- var sortAction = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'none';
-
- colIndex = +colIndex;
-
- this.data.rows.sort(function (a, b) {
- var _aIndex = a[0].rowIndex;
- var _bIndex = b[0].rowIndex;
- var _a = a[colIndex].content;
- var _b = b[colIndex].content;
-
- if (sortAction === 'none') {
- return _aIndex - _bIndex;
- } else if (sortAction === 'asc') {
- if (_a < _b) return -1;
- if (_a > _b) return 1;
- if (_a === _b) return 0;
- } else if (sortAction === 'desc') {
- if (_a < _b) return 1;
- if (_a > _b) return -1;
- if (_a === _b) return 0;
- }
- return 0;
- });
- }
- }, {
- key: 'bindCheckbox',
- value: function bindCheckbox() {
- if (!this.options.addCheckbox) return;
- var self = this;
-
- // map of checked rows
- this.checkMap = [];
-
- this.wrapper.on('click', '.data-table-col[data-col-index="0"] [type="checkbox"]', function () {
- var $checkbox = $(this);
- var $cell = $checkbox.closest('.data-table-col');
-
- var _self$getCellAttr3 = self.getCellAttr($cell),
- rowIndex = _self$getCellAttr3.rowIndex,
- isHeader = _self$getCellAttr3.isHeader;
-
- var checked = $checkbox.is(':checked');
-
- if (isHeader) {
- self.checkAll(checked);
- } else {
- self.checkRow(rowIndex, checked);
- }
- });
- }
- }, {
- key: 'getCheckedRows',
- value: function getCheckedRows() {
- return this.checkMap.map(function (c, rowIndex) {
- if (c) {
- return rowIndex;
- }
- return null;
- }).filter(function (c) {
- return c !== null || c !== undefined;
- });
- }
- }, {
- key: 'highlightCheckedRows',
- value: function highlightCheckedRows() {
- var _this4 = this;
-
- this.getCheckedRows().map(function (rowIndex) {
- return _this4.checkRow(rowIndex, true);
- });
- }
- }, {
- key: 'checkRow',
- value: function checkRow(rowIndex, toggle) {
- var value = toggle ? 1 : 0;
-
- // update internal map
- this.checkMap[rowIndex] = value;
- // set checkbox value explicitly
- this.bodyScrollable.find('.data-table-col[data-row-index="' + rowIndex + '"][data-col-index="0"] [type="checkbox"]').prop('checked', toggle);
- // highlight row
- this.highlightRow(rowIndex, toggle);
- }
- }, {
- key: 'checkAll',
- value: function checkAll(toggle) {
- var value = toggle ? 1 : 0;
-
- // update internal map
- if (toggle) {
- this.checkMap = Array.from(Array(this.getTotalRows())).map(function (c) {
- return value;
- });
- } else {
- this.checkMap = [];
- }
- // set checkbox value
- this.bodyScrollable.find('.data-table-col[data-col-index="0"] [type="checkbox"]').prop('checked', toggle);
- // highlight all
- this.highlightAll(toggle);
- }
- }, {
- key: 'highlightRow',
- value: function highlightRow(rowIndex) {
- var toggle = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
-
- var $row = this.bodyScrollable.find('.data-table-row[data-row-index="' + rowIndex + '"]');
-
- if (toggle) {
- $row.addClass('row-highlight');
- } else {
- $row.removeClass('row-highlight');
- }
- }
- }, {
- key: 'highlightAll',
- value: function highlightAll() {
- var toggle = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
-
- this.bodyScrollable.find('.data-table-row').toggleClass('row-highlight', toggle);
- }
- }, {
- key: 'setColumnWidth',
- value: function setColumnWidth(colIndex, width) {
- // set width for content
- this.setStyle('[data-col-index="' + colIndex + '"] .content', {
- width: width + 'px'
- });
- // set width for edit cell
- this.setStyle('[data-col-index="' + colIndex + '"] .edit-cell', {
- width: width + 'px'
- });
- }
- }, {
- key: 'setColumnHeaderWidth',
- value: function setColumnHeaderWidth(colIndex, width) {
- this.setStyle('[data-col-index="' + colIndex + '"][data-is-header] .content', {
- width: width + 'px'
- });
- }
- }, {
- key: 'setDefaultCellHeight',
- value: function setDefaultCellHeight(height) {
- this.setStyle('.data-table-col .content', {
- height: height + 'px'
- });
- }
- }, {
- key: 'setRowHeight',
- value: function setRowHeight(rowIndex, height) {
- this.setStyle('[data-row-index="' + rowIndex + '"] .content', {
- height: height + 'px'
- });
- }
- }, {
- key: 'setColumnWidths',
- value: function setColumnWidths() {
- var _this5 = this;
-
- var availableWidth = this.wrapper.width();
- var headerWidth = this.header.width();
-
- if (headerWidth > availableWidth) {
- // don't resize, horizontal scroll takes place
- return;
- }
-
- var deltaWidth = (availableWidth - headerWidth) / this.data.columns.length;
-
- this.data.columns.map(function (col) {
- var width = _this5.getColumnHeaderElement(col.colIndex).width();
- var finalWidth = width + deltaWidth - 16;
-
- if (_this5.options.addSerialNoColumn && col.colIndex === 0) {
- return;
- }
-
- _this5.setColumnHeaderWidth(col.colIndex, finalWidth);
- _this5.setColumnWidth(col.colIndex, finalWidth);
- });
- this.setBodyWidth();
- }
- }, {
- key: 'setBodyWidth',
- value: function setBodyWidth() {
- this.bodyScrollable.css('width', parseInt(this.header.css('width'), 10) + 1);
- }
- }, {
- key: 'setStyle',
- value: function setStyle(rule, styleMap) {
- var styles = this.$style.text();
-
- styles = (0, _utils.buildCSSRule)(rule, styleMap, styles);
- this.$style.html(styles);
- }
- }, {
- key: 'makeStyle',
- value: function makeStyle() {
- this.$style = $('').prependTo(this.wrapper);
- }
- }, {
- key: 'getColumn',
- value: function getColumn(colIndex) {
- colIndex = +colIndex;
- return this.data.columns.find(function (col) {
- return col.colIndex === colIndex;
- });
- }
- }, {
- key: 'getRow',
- value: function getRow(rowIndex) {
- rowIndex = +rowIndex;
- return this.data.rows.find(function (row) {
- return row[0].rowIndex === rowIndex;
- });
- }
- }, {
- key: 'getCell',
- value: function getCell(rowIndex, colIndex) {
- rowIndex = +rowIndex;
- colIndex = +colIndex;
- return this.data.rows.find(function (row) {
- return row[0].rowIndex === rowIndex;
- })[colIndex];
- }
- }, {
- key: 'getColumnHeaderElement',
- value: function getColumnHeaderElement(colIndex) {
- colIndex = +colIndex;
- if (colIndex < 0) return null;
- return this.wrapper.find('.data-table-col[data-is-header][data-col-index="' + colIndex + '"]');
- }
- }, {
- key: 'getColumnMinWidth',
- value: function getColumnMinWidth(colIndex) {
- colIndex = +colIndex;
- return this.minWidthMap && this.minWidthMap[colIndex];
- }
- }, {
- key: 'getCellAttr',
- value: function getCellAttr($cell) {
- return $cell.data();
- }
- }, {
- key: 'getTotalRows',
- value: function getTotalRows() {
- return this.data.rows.length;
- }
- }, {
- key: 'log',
- value: function log() {
- if (this.options.enableLogs) {
- console.log.apply(console, arguments);
- }
- }
- }]);
-
- return DataTable;
-}();
-
-exports.default = DataTable;
-module.exports = exports['default'];
-
-/***/ }),
-/* 9 */
/***/ (function(module, exports) {
module.exports = {"name":"frappe-datatable","version":"0.0.1","description":"A modern datatable library for the web","main":"lib/frappe-datatable.js","scripts":{"build":"webpack --env build","dev":"webpack --progress --colors --watch --env dev","test":"mocha --compilers js:babel-core/register --colors ./test/*.spec.js","test:watch":"mocha --compilers js:babel-core/register --colors -w ./test/*.spec.js"},"devDependencies":{"babel-cli":"6.24.1","babel-core":"6.24.1","babel-eslint":"7.2.3","babel-loader":"7.0.0","babel-plugin-add-module-exports":"0.2.1","babel-preset-es2015":"6.24.1","chai":"3.5.0","css-loader":"^0.28.7","eslint":"3.19.0","eslint-loader":"1.7.1","mocha":"3.3.0","node-sass":"^4.5.3","sass-loader":"^6.0.6","style-loader":"^0.18.2","webpack":"^3.1.0","yargs":"7.1.0"},"repository":{"type":"git","url":"https://github.com/frappe/datatable.git"},"keywords":["webpack","es6","starter","library","universal","umd","commonjs"],"author":"Faris Ansari","license":"MIT","bugs":{"url":"https://github.com/frappe/datatable/issues"},"homepage":"https://frappe.github.io/datatable","dependencies":{"bootstrap":"^4.0.0-beta","popper.js":"^1.12.5"}}
diff --git a/lib/frappe-datatable.js.map b/lib/frappe-datatable.js.map
index d376edb..04f6022 100644
--- a/lib/frappe-datatable.js.map
+++ b/lib/frappe-datatable.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 53d0d9bbe5d4ed268c48","webpack:///./src/index.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","webpack:///./src/datatable.js","webpack:///./package.json"],"names":["__version__","version","camelCaseToDash","str","replace","g","toLowerCase","makeDataAttributeString","props","keys","Object","map","key","_key","val","undefined","join","trim","getEditCellHTML","getColumnHTML","column","rowIndex","colIndex","isHeader","dataAttr","editCellHTML","format","content","getRowHTML","columns","getHeaderHTML","$header","getBodyHTML","rows","row","prepareColumn","col","i","assign","prepareColumns","_columns","prepareRowHeader","prepareRow","prepareRows","getDefault","a","b","escapeRegExp","getCSSString","styleMap","style","prop","hasOwnProperty","getCSSRuleBlock","rule","namespaceSelector","selector","buildCSSRule","cssRulesString","rulePatternStr","rulePattern","RegExp","match","property","value","propPattern","propertyStr","valueStr","replacer","DEFAULT_OPTIONS","events","data","editing","addSerialNoColumn","enableClusterize","enableLogs","addCheckbox","DataTable","wrapper","options","$","length","Error","refresh","html","header","find","bodyScrollable","footer","prepareData","render","makeDom","makeStyle","bindEvents","renderHeader","renderBody","setDimensions","renderBodyWithClusterize","renderBodyHTML","start","pageLength","end","initialData","getDataForClusterize","slice","self","clusterize","Clusterize","scrollElem","get","contentElem","callbacks","clusterChanged","highlightCheckedRows","log","appendRemainingData","dataAppended","promises","push","appendNextPagePromise","reduce","prev","cur","then","Promise","resolve","setTimeout","append","cell","getCell","refreshCell","$cell","$newCell","replaceWith","_data","serialNoColumn","resizable","unshift","concat","addCheckboxColumn","sortable","editable","_rows","bindFocusCell","bindEditCell","bindResizeColumn","bindSortColumn","bindCheckbox","css","width","margin","minWidthMap","each","parseInt","attr","height","getCellAttr","setColumnWidth","setDefaultCellHeight","setBodyWidth","setStyle","display","$focusedCell","on","removeClass","addClass","$editingCell","activateEditing","document","body","e","which","stopImmediatePropagation","submitEditing","target","is","hide","getColumn","_rowIndex","_colIndex","$editCell","empty","getEditingObject","currentCellEditing","initValue","show","parent","$input","getValue","setValue","done","updateCell","isDragging","$currCell","startWidth","startX","pageX","finalWidth","getColumnMinWidth","setColumnHeaderWidth","closest","sortAction","text","sortWith","onSort","sortRows","refreshRows","sort","_aIndex","_bIndex","_a","_b","checkMap","$checkbox","checked","checkAll","checkRow","c","filter","getCheckedRows","toggle","highlightRow","Array","from","getTotalRows","highlightAll","$row","toggleClass","availableWidth","headerWidth","deltaWidth","getColumnHeaderElement","styles","$style","prependTo","console","apply","arguments"],"mappings":"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AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,mCAAmC,gBAAgB;AACnD,IAAI;AACJ;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA,YAAY,oBAAoB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,oDAAoD,cAAc;;AAElE;AACA;;;;;;;AC3EA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,CAAC;AACD;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,w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","file":"frappe-datatable.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(\"DataTable\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"DataTable\"] = factory();\n\telse\n\t\troot[\"DataTable\"] = 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 53d0d9bbe5d4ed268c48","import DataTable from './datatable.js';\nimport packageJson from '../package.json';\nDataTable.__version__ = packageJson.version;\n\nexport default DataTable;\n\n\n\n// WEBPACK FOOTER //\n// ./src/index.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 ')\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 getTotalRows() {\n return this.data.rows.length;\n }\n\n log() {\n if (this.options.enableLogs) {\n console.log.apply(console, arguments);\n }\n }\n}\n\n\n\n\n// WEBPACK FOOTER //\n// ./src/datatable.js","module.exports = {\"name\":\"frappe-datatable\",\"version\":\"0.0.1\",\"description\":\"A modern datatable library for the web\",\"main\":\"lib/frappe-datatable.js\",\"scripts\":{\"build\":\"webpack --env build\",\"dev\":\"webpack --progress --colors --watch --env dev\",\"test\":\"mocha --compilers js:babel-core/register --colors ./test/*.spec.js\",\"test:watch\":\"mocha --compilers js:babel-core/register --colors -w ./test/*.spec.js\"},\"devDependencies\":{\"babel-cli\":\"6.24.1\",\"babel-core\":\"6.24.1\",\"babel-eslint\":\"7.2.3\",\"babel-loader\":\"7.0.0\",\"babel-plugin-add-module-exports\":\"0.2.1\",\"babel-preset-es2015\":\"6.24.1\",\"chai\":\"3.5.0\",\"css-loader\":\"^0.28.7\",\"eslint\":\"3.19.0\",\"eslint-loader\":\"1.7.1\",\"mocha\":\"3.3.0\",\"node-sass\":\"^4.5.3\",\"sass-loader\":\"^6.0.6\",\"style-loader\":\"^0.18.2\",\"webpack\":\"^3.1.0\",\"yargs\":\"7.1.0\"},\"repository\":{\"type\":\"git\",\"url\":\"https://github.com/frappe/datatable.git\"},\"keywords\":[\"webpack\",\"es6\",\"starter\",\"library\",\"universal\",\"umd\",\"commonjs\"],\"author\":\"Faris Ansari\",\"license\":\"MIT\",\"bugs\":{\"url\":\"https://github.com/frappe/datatable/issues\"},\"homepage\":\"https://frappe.github.io/datatable\",\"dependencies\":{\"bootstrap\":\"^4.0.0-beta\",\"popper.js\":\"^1.12.5\"}}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./package.json\n// module id = 9\n// module chunks = 0"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 8769898a37d07ffd715b","webpack:///./src/index.js","webpack:///./src/datatable.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","webpack:///./package.json"],"names":["__version__","version","DEFAULT_OPTIONS","events","data","columns","rows","editing","addSerialNoColumn","enableClusterize","enableLogs","addCheckbox","DataTable","wrapper","options","$","length","Error","Object","assign","refresh","html","header","find","bodyScrollable","footer","prepareData","render","makeDom","makeStyle","bindEvents","renderHeader","renderBody","setDimensions","renderBodyWithClusterize","renderBodyHTML","start","pageLength","end","initialData","getDataForClusterize","slice","self","clusterize","Clusterize","scrollElem","get","contentElem","callbacks","clusterChanged","highlightCheckedRows","log","appendRemainingData","dataAppended","promises","push","appendNextPagePromise","reduce","prev","cur","then","Promise","resolve","setTimeout","append","map","row","rowIndex","colIndex","value","cell","getCell","content","refreshCell","selector","$cell","$newCell","replaceWith","_data","serialNoColumn","resizable","unshift","i","val","concat","addCheckboxColumn","sortable","editable","_columns","_rows","bindFocusCell","bindEditCell","bindResizeColumn","bindSortColumn","bindCheckbox","css","width","margin","minWidthMap","each","col","parseInt","attr","height","getCellAttr","minWidth","getColumnMinWidth","setColumnWidth","setDefaultCellHeight","setBodyWidth","setStyle","display","$focusedCell","on","removeClass","addClass","$editingCell","activateEditing","document","body","e","which","stopImmediatePropagation","submitEditing","target","is","hide","getColumn","_rowIndex","_colIndex","$editCell","empty","getEditingObject","currentCellEditing","initValue","show","parent","$input","getValue","setValue","done","updateCell","isDragging","$currCell","startWidth","startX","pageX","finalWidth","setColumnHeaderWidth","closest","sortAction","text","sortWith","onSort","sortRows","refreshRows","sort","a","b","_aIndex","_bIndex","_a","_b","checkMap","$checkbox","isHeader","checked","checkAll","checkRow","c","filter","undefined","getCheckedRows","toggle","prop","highlightRow","Array","from","getTotalRows","highlightAll","$row","toggleClass","availableWidth","headerWidth","deltaWidth","getColumnHeaderElement","rule","styleMap","styles","$style","prependTo","console","apply","arguments","camelCaseToDash","str","replace","g","toLowerCase","makeDataAttributeString","props","keys","key","_key","join","trim","getEditCellHTML","getColumnHTML","column","dataAttr","editCellHTML","format","getRowHTML","getHeaderHTML","$header","getBodyHTML","prepareColumn","prepareColumns","prepareRowHeader","prepareRow","prepareRows","getDefault","escapeRegExp","getCSSString","style","hasOwnProperty","getCSSRuleBlock","namespaceSelector","buildCSSRule","cssRulesString","rulePatternStr","rulePattern","RegExp","match","property","propPattern","propertyStr","valueStr","replacer"],"mappings":"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AsB,gCAAgC,EAAE,eAAe,gCAAgC,8BAA8B,6BAA6B,2BAA2B,0BAA0B,sBAAsB,EAAE;;AAElrL;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,mCAAmC,gBAAgB;AACnD,IAAI;AACJ;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA,YAAY,oBAAoB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,oDAAoD,cAAc;;AAElE;AACA;;;;;;;AC3EA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,CAAC;AACD;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;;;;;;;ACxFA,kBAAkB,+IAA+I,qPAAqP,oBAAoB,0WAA0W,eAAe,6DAA6D,+HAA+H,mDAAmD,iEAAiE,iD","file":"frappe-datatable.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(\"DataTable\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"DataTable\"] = factory();\n\telse\n\t\troot[\"DataTable\"] = 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 8769898a37d07ffd715b","import DataTable from './datatable.js';\nimport packageJson from '../package.json';\nDataTable.__version__ = packageJson.version;\n\nexport default DataTable;\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\nimport './style.scss';\n\nconst DEFAULT_OPTIONS = {\n events: null,\n data: {\n columns: [],\n rows: []\n },\n editing: null,\n addSerialNoColumn: true,\n enableClusterize: true,\n enableLogs: false,\n addCheckbox: true\n};\n\nexport default class DataTable {\n constructor(wrapper, options) {\n\n this.wrapper = $(wrapper);\n if (this.wrapper.length === 0) {\n throw new Error('Invalid argument given for `wrapper`');\n }\n\n this.options = Object.assign({}, DEFAULT_OPTIONS, options);\n this.events = this.options.events;\n\n if (this.options.data) {\n this.refresh(this.options.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.options.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 const self = this;\n\n this.clusterize = new Clusterize({\n rows: initialData,\n scrollElem: this.bodyScrollable.get(0),\n contentElem: this.bodyScrollable.find('tbody').get(0),\n callbacks: {\n clusterChanged() {\n self.highlightCheckedRows();\n }\n }\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 cell = this.getCell(rowIndex, colIndex);\n\n cell.content = 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.rowIndex}\"][data-col-index=\"${cell.colIndex}\"]`;\n const $cell = this.bodyScrollable.find(selector);\n const $newCell = $(getColumnHTML(cell));\n\n $cell.replaceWith($newCell);\n }\n\n prepareData(data) {\n // cache original data passed\n this._data = data;\n let { columns, rows } = data;\n\n if (this.options.addSerialNoColumn) {\n const serialNoColumn = {\n content: 'Sr. No',\n resizable: false\n };\n\n columns.unshift(serialNoColumn);\n\n rows = rows.map((row, i) => {\n const val = (i + 1) + '';\n\n return [val].concat(row);\n });\n }\n\n if (this.options.addCheckbox) {\n const addCheckboxColumn = {\n content: '',\n resizable: false,\n sortable: false,\n editable: false\n };\n\n columns.unshift(addCheckboxColumn);\n\n rows = rows.map((row, i) => {\n // make copy of object, else it will be mutated\n const val = Object.assign({}, addCheckboxColumn);\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 bindEvents() {\n this.bindFocusCell();\n this.bindEditCell();\n this.bindResizeColumn();\n this.bindSortColumn();\n this.bindCheckbox();\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 let 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 const minWidth = self.getColumnMinWidth(colIndex);\n\n if (width < minWidth) {\n width = minWidth;\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 const { colIndex } = self.getCellAttr($cell);\n\n if (self.options.addCheckbox && colIndex === 0) {\n return;\n }\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\n this.$editingCell = null;\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 && !this.$editingCell) {\n this.log('editingCell');\n this.activateEditing(this.$focusedCell);\n e.stopImmediatePropagation();\n }\n });\n\n $(document.body).on('keypress', (e) => {\n // enter keypress on editing cell\n if (e.which === 13 && this.$editingCell) {\n this.log('submitCell');\n this.submitEditing(this.$editingCell);\n e.stopImmediatePropagation();\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 this.$editingCell = null;\n });\n }\n\n activateEditing($cell) {\n const { rowIndex, colIndex } = this.getCellAttr($cell);\n const col = this.getColumn(colIndex);\n\n if (col && col.editable === false) {\n return;\n }\n\n if (this.$editingCell) {\n const { _rowIndex, _colIndex } = this.getCellAttr(this.$editingCell);\n\n if (rowIndex === _rowIndex && colIndex === _colIndex) {\n // editing the same cell\n return;\n }\n }\n\n this.$editingCell = $cell;\n const $editCell = $cell.find('.edit-cell').empty();\n const cell = this.getCell(rowIndex, colIndex);\n const editing = this.getEditingObject(colIndex, rowIndex, cell.content, $editCell);\n\n if (editing) {\n this.currentCellEditing = editing;\n // initialize editing input with cell value\n editing.initValue(cell.content);\n $editCell.show();\n }\n }\n\n getEditingObject(colIndex, rowIndex, value, parent) {\n if (this.options.editing) {\n return this.options.editing(colIndex, rowIndex, value, parent);\n }\n\n // editing fallback\n const $input = $('');\n\n parent.append($input);\n\n return {\n initValue(value) {\n return $input.val(value);\n },\n getValue() {\n return $input.val();\n },\n setValue(value) {\n return $input.val(value);\n }\n };\n }\n\n submitEditing($cell) {\n const { rowIndex, colIndex } = this.getCellAttr($cell);\n\n if ($cell) {\n const editing = this.currentCellEditing;\n\n if (editing) {\n const value = editing.getValue();\n const done = editing.setValue(value);\n\n if (done && done.then) {\n // wait for promise then update internal state\n done.then(\n () => this.updateCell(rowIndex, colIndex, value)\n );\n } else {\n this.updateCell(rowIndex, colIndex, value);\n }\n }\n }\n\n this.currentCellEditing = null;\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 const col = self.getColumn(colIndex);\n\n if (col && col.sortable === false) {\n return;\n }\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 && 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 bindCheckbox() {\n if (!this.options.addCheckbox) return;\n const self = this;\n\n // map of checked rows\n this.checkMap = [];\n\n this.wrapper.on('click', '.data-table-col[data-col-index=\"0\"] [type=\"checkbox\"]', function () {\n const $checkbox = $(this);\n const $cell = $checkbox.closest('.data-table-col');\n const { rowIndex, isHeader } = self.getCellAttr($cell);\n const checked = $checkbox.is(':checked');\n\n if (isHeader) {\n self.checkAll(checked);\n } else {\n self.checkRow(rowIndex, checked);\n }\n });\n }\n\n getCheckedRows() {\n return this.checkMap\n .map((c, rowIndex) => {\n if (c) {\n return rowIndex;\n }\n return null;\n })\n .filter(c => {\n return c !== null || c !== undefined;\n });\n }\n\n highlightCheckedRows() {\n this.getCheckedRows()\n .map(rowIndex => this.checkRow(rowIndex, true));\n }\n\n checkRow(rowIndex, toggle) {\n const value = toggle ? 1 : 0;\n\n // update internal map\n this.checkMap[rowIndex] = value;\n // set checkbox value explicitly\n this.bodyScrollable\n .find(`.data-table-col[data-row-index=\"${rowIndex}\"][data-col-index=\"0\"] [type=\"checkbox\"]`)\n .prop('checked', toggle);\n // highlight row\n this.highlightRow(rowIndex, toggle);\n }\n\n checkAll(toggle) {\n const value = toggle ? 1 : 0;\n\n // update internal map\n if (toggle) {\n this.checkMap = Array.from(Array(this.getTotalRows())).map(c => value);\n } else {\n this.checkMap = [];\n }\n // set checkbox value\n this.bodyScrollable\n .find('.data-table-col[data-col-index=\"0\"] [type=\"checkbox\"]')\n .prop('checked', toggle);\n // highlight all\n this.highlightAll(toggle);\n }\n\n highlightRow(rowIndex, toggle = true) {\n const $row = this.bodyScrollable\n .find(`.data-table-row[data-row-index=\"${rowIndex}\"]`);\n\n if (toggle) {\n $row.addClass('row-highlight');\n } else {\n $row.removeClass('row-highlight');\n }\n }\n\n highlightAll(toggle = true) {\n this.bodyScrollable\n .find('.data-table-row')\n .toggleClass('row-highlight', toggle);\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.options.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 getTotalRows() {\n return this.data.rows.length;\n }\n\n log() {\n if (this.options.enableLogs) {\n console.log.apply(console, arguments);\n }\n }\n}\n\n\n\n\n// WEBPACK FOOTER //\n// ./src/datatable.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