diff --git a/index.html b/index.html
index 1e33709..aab10c5 100644
--- a/index.html
+++ b/index.html
@@ -70,7 +70,7 @@
takeAvailableSpace: false,
columns,
data,
- editing(colIndex, rowIndex, value, parent) {
+ getEditor(colIndex, rowIndex, value, parent) {
// editing obj only for date field
if (colIndex != 6) return;
diff --git a/lib/frappe-datatable.js b/lib/frappe-datatable.js
index 8c2e17b..289879e 100644
--- a/lib/frappe-datatable.js
+++ b/lib/frappe-datatable.js
@@ -7,7 +7,7 @@
exports["DataTable"] = factory(require("sortablejs"), require("clusterize.js"));
else
root["DataTable"] = factory(root["Sortable"], root["Clusterize"]);
-})(typeof self !== 'undefined' ? self : this, function(__WEBPACK_EXTERNAL_MODULE_9__, __WEBPACK_EXTERNAL_MODULE_11__) {
+})(typeof self !== 'undefined' ? self : this, function(__WEBPACK_EXTERNAL_MODULE_8__, __WEBPACK_EXTERNAL_MODULE_11__) {
return /******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
@@ -70,7 +70,7 @@ return /******/ (function(modules) { // webpackBootstrap
/******/ __webpack_require__.p = "";
/******/
/******/ // Load entry module and return exports
-/******/ return __webpack_require__(__webpack_require__.s = 6);
+/******/ return __webpack_require__(__webpack_require__.s = 4);
/******/ })
/************************************************************************/
/******/ ([
@@ -537,1002 +537,6 @@ function chainPromises(promises) {
"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; }; }();
-
-exports.getRowHTML = getRowHTML;
-
-var _dom = __webpack_require__(0);
-
-var _dom2 = _interopRequireDefault(_dom);
-
-var _utils = __webpack_require__(1);
-
-var _cellmanager = __webpack_require__(3);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-var RowManager = function () {
- function RowManager(instance) {
- _classCallCheck(this, RowManager);
-
- this.instance = instance;
- this.options = this.instance.options;
- this.wrapper = this.instance.wrapper;
- this.bodyScrollable = this.instance.bodyScrollable;
-
- this.bindEvents();
- this.refreshRows = (0, _utils.promisify)(this.refreshRows, this);
- }
-
- _createClass(RowManager, [{
- key: 'bindEvents',
- value: function bindEvents() {
- this.bindCheckbox();
- }
- }, {
- key: 'bindCheckbox',
- value: function bindCheckbox() {
- var _this = this;
-
- if (!this.options.addCheckboxColumn) return;
-
- // map of checked rows
- this.checkMap = [];
-
- _dom2.default.on(this.wrapper, 'click', '.data-table-col[data-col-index="0"] [type="checkbox"]', function (e, $checkbox) {
- var $cell = $checkbox.closest('.data-table-col');
-
- var _$$data = _dom2.default.data($cell),
- rowIndex = _$$data.rowIndex,
- isHeader = _$$data.isHeader;
-
- var checked = $checkbox.checked;
-
- if (isHeader) {
- _this.checkAll(checked);
- } else {
- _this.checkRow(rowIndex, checked);
- }
- });
- }
- }, {
- key: 'refreshRows',
- value: function refreshRows() {
- this.instance.renderBody();
- this.instance.setDimensions();
- }
- }, {
- key: 'refreshRow',
- value: function refreshRow(row, rowIndex) {
- var _this2 = this;
-
- var _row = this.datamanager.updateRow(row, rowIndex);
-
- _row.forEach(function (cell) {
- _this2.cellmanager.refreshCell(cell);
- });
- }
- }, {
- key: 'getCheckedRows',
- value: function getCheckedRows() {
- if (!this.checkMap) {
- return [];
- }
-
- 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 _this3 = this;
-
- this.getCheckedRows().map(function (rowIndex) {
- return _this3.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
- _dom2.default.each('.data-table-col[data-row-index="' + rowIndex + '"][data-col-index="0"] [type="checkbox"]', this.bodyScrollable).map(function (input) {
- input.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
- _dom2.default.each('.data-table-col[data-col-index="0"] [type="checkbox"]', this.bodyScrollable).map(function (input) {
- input.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.getRow$(rowIndex);
- if (!$row) return;
-
- if (!toggle && this.bodyScrollable.classList.contains('row-highlight-all')) {
- $row.classList.add('row-unhighlight');
- return;
- }
-
- if (toggle && $row.classList.contains('row-unhighlight')) {
- $row.classList.remove('row-unhighlight');
- }
-
- this._highlightedRows = this._highlightedRows || {};
-
- if (toggle) {
- $row.classList.add('row-highlight');
- this._highlightedRows[rowIndex] = $row;
- } else {
- $row.classList.remove('row-highlight');
- delete this._highlightedRows[rowIndex];
- }
- }
- }, {
- key: 'highlightAll',
- value: function highlightAll() {
- var toggle = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
-
- if (toggle) {
- this.bodyScrollable.classList.add('row-highlight-all');
- } else {
- this.bodyScrollable.classList.remove('row-highlight-all');
- for (var rowIndex in this._highlightedRows) {
- var $row = this._highlightedRows[rowIndex];
- $row.classList.remove('row-highlight');
- }
- this._highlightedRows = {};
- }
- }
- }, {
- key: 'getRow$',
- value: function getRow$(rowIndex) {
- return (0, _dom2.default)('.data-table-row[data-row-index="' + rowIndex + '"]', this.bodyScrollable);
- }
- }, {
- key: 'getTotalRows',
- value: function getTotalRows() {
- return this.datamanager.getRowCount();
- }
- }, {
- key: 'getFirstRowIndex',
- value: function getFirstRowIndex() {
- return 0;
- }
- }, {
- key: 'getLastRowIndex',
- value: function getLastRowIndex() {
- return this.datamanager.getRowCount() - 1;
- }
- }, {
- key: 'scrollToRow',
- value: function scrollToRow(rowIndex) {
- rowIndex = +rowIndex;
- this._lastScrollTo = this._lastScrollTo || 0;
- var $row = this.getRow$(rowIndex);
- if (_dom2.default.inViewport($row, this.bodyScrollable)) return;
-
- var _$row$getBoundingClie = $row.getBoundingClientRect(),
- height = _$row$getBoundingClie.height;
-
- var _bodyScrollable$getBo = this.bodyScrollable.getBoundingClientRect(),
- top = _bodyScrollable$getBo.top,
- bottom = _bodyScrollable$getBo.bottom;
-
- var rowsInView = Math.floor((bottom - top) / height);
-
- var offset = 0;
- if (rowIndex > this._lastScrollTo) {
- offset = height * (rowIndex + 1 - rowsInView);
- } else {
- offset = height * (rowIndex + 1 - 1);
- }
-
- this._lastScrollTo = rowIndex;
- _dom2.default.scrollTop(this.bodyScrollable, offset);
- }
- }, {
- key: 'datamanager',
- get: function get() {
- return this.instance.datamanager;
- }
- }, {
- key: 'cellmanager',
- get: function get() {
- return this.instance.cellmanager;
- }
- }]);
-
- return RowManager;
-}();
-
-exports.default = RowManager;
-function getRowHTML(row, props) {
- var dataAttr = (0, _utils.makeDataAttributeString)(props);
-
- return '\n
\n ' + row.map(_cellmanager.getCellHTML).join('') + '\n
\n ';
-}
-
-/***/ }),
-/* 3 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-
-var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
-
-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; }; }();
-
-exports.getCellHTML = getCellHTML;
-exports.getCellContent = getCellContent;
-exports.getEditCellHTML = getEditCellHTML;
-
-var _utils = __webpack_require__(1);
-
-var _keyboard = __webpack_require__(4);
-
-var _keyboard2 = _interopRequireDefault(_keyboard);
-
-var _dom = __webpack_require__(0);
-
-var _dom2 = _interopRequireDefault(_dom);
-
-var _columnmanager = __webpack_require__(5);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-var CellManager = function () {
- function CellManager(instance) {
- _classCallCheck(this, CellManager);
-
- this.instance = instance;
- this.wrapper = this.instance.wrapper;
- this.options = this.instance.options;
- this.style = this.instance.style;
- this.bodyScrollable = this.instance.bodyScrollable;
- this.columnmanager = this.instance.columnmanager;
- this.rowmanager = this.instance.rowmanager;
- this.datamanager = this.instance.datamanager;
-
- this.bindEvents();
- }
-
- _createClass(CellManager, [{
- key: 'bindEvents',
- value: function bindEvents() {
- this.bindFocusCell();
- this.bindEditCell();
- this.bindKeyboardSelection();
- this.bindCopyCellContents();
- this.bindMouseEvents();
- }
- }, {
- key: 'bindFocusCell',
- value: function bindFocusCell() {
- this.bindKeyboardNav();
- }
- }, {
- key: 'bindEditCell',
- value: function bindEditCell() {
- var _this = this;
-
- this.$editingCell = null;
-
- _dom2.default.on(this.bodyScrollable, 'dblclick', '.data-table-col', function (e, cell) {
- _this.activateEditing(cell);
- });
-
- _keyboard2.default.on('enter', function (e) {
- if (_this.$focusedCell && !_this.$editingCell) {
- // enter keypress on focused cell
- _this.activateEditing(_this.$focusedCell);
- } else if (_this.$editingCell) {
- // enter keypress on editing cell
- _this.submitEditing();
- _this.deactivateEditing();
- }
- });
- }
- }, {
- key: 'bindKeyboardNav',
- value: function bindKeyboardNav() {
- var _this2 = this;
-
- var focusCell = function focusCell(direction) {
- console.log(direction);
- if (!_this2.$focusedCell || _this2.$editingCell) {
- return false;
- }
-
- var $cell = _this2.$focusedCell;
-
- if (direction === 'left') {
- $cell = _this2.getLeftCell$($cell);
- } else if (direction === 'right' || direction === 'tab') {
- $cell = _this2.getRightCell$($cell);
- } else if (direction === 'up') {
- $cell = _this2.getAboveCell$($cell);
- } else if (direction === 'down') {
- $cell = _this2.getBelowCell$($cell);
- }
-
- _this2.focusCell($cell);
- return true;
- };
-
- var focusLastCell = function focusLastCell(direction) {
- if (!_this2.$focusedCell || _this2.$editingCell) {
- return false;
- }
-
- var $cell = _this2.$focusedCell;
-
- var _$$data = _dom2.default.data($cell),
- rowIndex = _$$data.rowIndex,
- colIndex = _$$data.colIndex;
-
- if (direction === 'left') {
- $cell = _this2.getLeftMostCell$(rowIndex);
- } else if (direction === 'right') {
- $cell = _this2.getRightMostCell$(rowIndex);
- } else if (direction === 'up') {
- $cell = _this2.getTopMostCell$(colIndex);
- } else if (direction === 'down') {
- $cell = _this2.getBottomMostCell$(colIndex);
- }
-
- _this2.focusCell($cell);
- return true;
- };
-
- ['left', 'right', 'up', 'down', 'tab'].map(function (direction) {
- return _keyboard2.default.on(direction, function () {
- return focusCell(direction);
- });
- });
-
- ['left', 'right', 'up', 'down'].map(function (direction) {
- return _keyboard2.default.on('ctrl+' + direction, function () {
- return focusLastCell(direction);
- });
- });
-
- _keyboard2.default.on('esc', function () {
- _this2.deactivateEditing();
- });
- }
- }, {
- key: 'bindKeyboardSelection',
- value: function bindKeyboardSelection() {
- var _this3 = this;
-
- var getNextSelectionCursor = function getNextSelectionCursor(direction) {
- var $selectionCursor = _this3.getSelectionCursor();
-
- if (direction === 'left') {
- $selectionCursor = _this3.getLeftCell$($selectionCursor);
- } else if (direction === 'right') {
- $selectionCursor = _this3.getRightCell$($selectionCursor);
- } else if (direction === 'up') {
- $selectionCursor = _this3.getAboveCell$($selectionCursor);
- } else if (direction === 'down') {
- $selectionCursor = _this3.getBelowCell$($selectionCursor);
- }
-
- return $selectionCursor;
- };
-
- ['left', 'right', 'up', 'down'].map(function (direction) {
- return _keyboard2.default.on('shift+' + direction, function () {
- return _this3.selectArea(getNextSelectionCursor(direction));
- });
- });
- }
- }, {
- key: 'bindCopyCellContents',
- value: function bindCopyCellContents() {
- var _this4 = this;
-
- _keyboard2.default.on('ctrl+c', function () {
- _this4.copyCellContents(_this4.$focusedCell, _this4.$selectionCursor);
- });
- }
- }, {
- key: 'bindMouseEvents',
- value: function bindMouseEvents() {
- var _this5 = this;
-
- var mouseDown = null;
-
- _dom2.default.on(this.bodyScrollable, 'mousedown', '.data-table-col', function (e) {
- mouseDown = true;
- _this5.focusCell((0, _dom2.default)(e.delegatedTarget));
- });
-
- _dom2.default.on(this.bodyScrollable, 'mouseup', function () {
- mouseDown = false;
- });
-
- var selectArea = function selectArea(e) {
- if (!mouseDown) return;
- _this5.selectArea((0, _dom2.default)(e.delegatedTarget));
- };
-
- _dom2.default.on(this.bodyScrollable, 'mousemove', '.data-table-col', (0, _utils.throttle)(selectArea, 50));
- }
- }, {
- key: 'focusCell',
- value: function focusCell($cell) {
- var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
- _ref$skipClearSelecti = _ref.skipClearSelection,
- skipClearSelection = _ref$skipClearSelecti === undefined ? 0 : _ref$skipClearSelecti;
-
- if (!$cell) return;
-
- // don't focus if already editing cell
- if ($cell === this.$editingCell) return;
-
- var _$$data2 = _dom2.default.data($cell),
- colIndex = _$$data2.colIndex,
- isHeader = _$$data2.isHeader;
-
- if (isHeader) {
- return;
- }
-
- var column = this.columnmanager.getColumn(colIndex);
- if (column.focusable === false) {
- return;
- }
-
- this.deactivateEditing();
- if (!skipClearSelection) {
- this.clearSelection();
- }
-
- if (this.$focusedCell) {
- this.$focusedCell.classList.remove('selected');
- }
-
- this.$focusedCell = $cell;
- $cell.classList.add('selected');
-
- this.highlightRowColumnHeader($cell);
- this.scrollToCell($cell);
- }
- }, {
- key: 'highlightRowColumnHeader',
- value: function highlightRowColumnHeader($cell) {
- var _$$data3 = _dom2.default.data($cell),
- colIndex = _$$data3.colIndex,
- rowIndex = _$$data3.rowIndex;
-
- var _colIndex = this.datamanager.getColumnIndexById('_rowIndex');
- var colHeaderSelector = '.data-table-header .data-table-col[data-col-index="' + colIndex + '"]';
- var rowHeaderSelector = '.data-table-col[data-row-index="' + rowIndex + '"][data-col-index="' + _colIndex + '"]';
-
- if (this.lastHeaders) {
- _dom2.default.removeStyle(this.lastHeaders, 'backgroundColor');
- }
-
- var colHeader = (0, _dom2.default)(colHeaderSelector, this.wrapper);
- var rowHeader = (0, _dom2.default)(rowHeaderSelector, this.wrapper);
-
- _dom2.default.style([colHeader, rowHeader], {
- backgroundColor: '#f5f7fa' // light-bg
- });
-
- this.lastHeaders = [colHeader, rowHeader];
- }
- }, {
- key: 'selectAreaOnClusterChanged',
- value: function selectAreaOnClusterChanged() {
- if (!(this.$focusedCell && this.$selectionCursor)) return;
-
- var _$$data4 = _dom2.default.data(this.$selectionCursor),
- colIndex = _$$data4.colIndex,
- rowIndex = _$$data4.rowIndex;
-
- var $cell = this.getCell$(colIndex, rowIndex);
-
- if (!$cell || $cell === this.$selectionCursor) return;
-
- // selectArea needs $focusedCell
- var fCell = _dom2.default.data(this.$focusedCell);
- this.$focusedCell = this.getCell$(fCell.colIndex, fCell.rowIndex);
-
- this.selectArea($cell);
- }
- }, {
- key: 'focusCellOnClusterChanged',
- value: function focusCellOnClusterChanged() {
- if (!this.$focusedCell) return;
-
- var _$$data5 = _dom2.default.data(this.$focusedCell),
- colIndex = _$$data5.colIndex,
- rowIndex = _$$data5.rowIndex;
-
- var $cell = this.getCell$(colIndex, rowIndex);
-
- if (!$cell) return;
- // this function is called after selectAreaOnClusterChanged,
- // focusCell calls clearSelection which resets the area selection
- // so a flag to skip it
- this.focusCell($cell, { skipClearSelection: 1 });
- }
- }, {
- key: 'selectArea',
- value: function selectArea($selectionCursor) {
- if (!this.$focusedCell) return;
-
- if (this._selectArea(this.$focusedCell, $selectionCursor)) {
- // valid selection
- this.$selectionCursor = $selectionCursor;
- }
- }
- }, {
- key: '_selectArea',
- value: function _selectArea($cell1, $cell2) {
- var _this6 = this;
-
- if ($cell1 === $cell2) return false;
-
- var cells = this.getCellsInRange($cell1, $cell2);
- if (!cells) return false;
-
- this.clearSelection();
- cells.map(function (index) {
- return _this6.getCell$.apply(_this6, _toConsumableArray(index));
- }).map(function ($cell) {
- return $cell.classList.add('highlight');
- });
- return true;
- }
- }, {
- key: 'getCellsInRange',
- value: function getCellsInRange($cell1, $cell2) {
- var colIndex1 = void 0,
- rowIndex1 = void 0,
- colIndex2 = void 0,
- rowIndex2 = void 0;
-
- if (typeof $cell1 === 'number') {
- var _arguments = Array.prototype.slice.call(arguments);
-
- colIndex1 = _arguments[0];
- rowIndex1 = _arguments[1];
- colIndex2 = _arguments[2];
- rowIndex2 = _arguments[3];
- } else if ((typeof $cell1 === 'undefined' ? 'undefined' : _typeof($cell1)) === 'object') {
-
- if (!($cell1 && $cell2)) {
- return false;
- }
-
- var cell1 = _dom2.default.data($cell1);
- var cell2 = _dom2.default.data($cell2);
-
- colIndex1 = cell1.colIndex;
- rowIndex1 = cell1.rowIndex;
- colIndex2 = cell2.colIndex;
- rowIndex2 = cell2.rowIndex;
- }
-
- if (rowIndex1 > rowIndex2) {
- var _ref2 = [rowIndex2, rowIndex1];
- rowIndex1 = _ref2[0];
- rowIndex2 = _ref2[1];
- }
-
- if (colIndex1 > colIndex2) {
- var _ref3 = [colIndex2, colIndex1];
- colIndex1 = _ref3[0];
- colIndex2 = _ref3[1];
- }
-
- if (this.isStandardCell(colIndex1) || this.isStandardCell(colIndex2)) {
- return false;
- }
-
- var cells = [];
- var colIndex = colIndex1;
- var rowIndex = rowIndex1;
- var rowIndices = [];
-
- while (rowIndex <= rowIndex2) {
- rowIndices.push(rowIndex);
- rowIndex++;
- }
-
- rowIndices.map(function (rowIndex) {
- while (colIndex <= colIndex2) {
- cells.push([colIndex, rowIndex]);
- colIndex++;
- }
- colIndex = colIndex1;
- });
-
- return cells;
- }
- }, {
- key: 'clearSelection',
- value: function clearSelection() {
- _dom2.default.each('.data-table-col.highlight', this.bodyScrollable).map(function (cell) {
- return cell.classList.remove('highlight');
- });
-
- this.$selectionCursor = null;
- }
- }, {
- key: 'getSelectionCursor',
- value: function getSelectionCursor() {
- return this.$selectionCursor || this.$focusedCell;
- }
- }, {
- key: 'activateEditing',
- value: function activateEditing($cell) {
- var _$$data6 = _dom2.default.data($cell),
- rowIndex = _$$data6.rowIndex,
- colIndex = _$$data6.colIndex;
-
- var col = this.columnmanager.getColumn(colIndex);
- if (col && (col.editable === false || col.focusable === false)) {
- return;
- }
-
- var cell = this.getCell(colIndex, rowIndex);
- if (cell && cell.editable === false) {
- return;
- }
-
- if (this.$editingCell) {
- var _$$data7 = _dom2.default.data(this.$editingCell),
- _rowIndex = _$$data7._rowIndex,
- _colIndex = _$$data7._colIndex;
-
- if (rowIndex === _rowIndex && colIndex === _colIndex) {
- // editing the same cell
- return;
- }
- }
-
- this.$editingCell = $cell;
- $cell.classList.add('editing');
-
- var $editCell = (0, _dom2.default)('.edit-cell', $cell);
- $editCell.innerHTML = '';
-
- var editing = this.getEditingObject(colIndex, rowIndex, cell.content, $editCell);
-
- if (editing) {
- this.currentCellEditing = editing;
- // initialize editing input with cell value
- editing.initValue(cell.content, rowIndex, col);
- }
- }
- }, {
- key: 'deactivateEditing',
- value: function deactivateEditing() {
- // keep focus on the cell so that keyboard navigation works
- if (this.$focusedCell) this.$focusedCell.focus();
-
- if (!this.$editingCell) return;
- this.$editingCell.classList.remove('editing');
- this.$editingCell = null;
- }
- }, {
- key: 'getEditingObject',
- value: function getEditingObject(colIndex, rowIndex, value, parent) {
- // debugger;
- var obj = this.options.editing(colIndex, rowIndex, value, parent);
- if (obj && obj.setValue) return obj;
-
- // editing fallback
- var $input = _dom2.default.create('input', {
- type: 'text',
- inside: parent
- });
-
- return {
- initValue: function initValue(value) {
- $input.focus();
- $input.value = value;
- },
- getValue: function getValue() {
- return $input.value;
- },
- setValue: function setValue(value) {
- $input.value = value;
- }
- };
- }
- }, {
- key: 'submitEditing',
- value: function submitEditing() {
- var _this7 = this;
-
- if (!this.$editingCell) return;
- var $cell = this.$editingCell;
-
- var _$$data8 = _dom2.default.data($cell),
- rowIndex = _$$data8.rowIndex,
- colIndex = _$$data8.colIndex;
-
- var col = this.datamanager.getColumn(colIndex);
-
- if ($cell) {
- var editing = this.currentCellEditing;
-
- if (editing) {
- var value = editing.getValue();
- var done = editing.setValue(value, rowIndex, col);
- var oldValue = this.getCell(colIndex, rowIndex).content;
-
- // update cell immediately
- this.updateCell(colIndex, rowIndex, value);
- $cell.focus();
-
- if (done && done.then) {
- // revert to oldValue if promise fails
- done.catch(function (e) {
- console.log(e);
- _this7.updateCell(colIndex, rowIndex, oldValue);
- });
- }
- }
- }
-
- this.currentCellEditing = null;
- }
- }, {
- key: 'copyCellContents',
- value: function copyCellContents($cell1, $cell2) {
- var _this8 = this;
-
- if (!$cell2 && $cell1) {
- // copy only focusedCell
- var _$$data9 = _dom2.default.data($cell1),
- colIndex = _$$data9.colIndex,
- rowIndex = _$$data9.rowIndex;
-
- var cell = this.getCell(colIndex, rowIndex);
- (0, _utils.copyTextToClipboard)(cell.content);
- return;
- }
- var cells = this.getCellsInRange($cell1, $cell2);
-
- if (!cells) return;
-
- var values = cells
- // get cell objects
- .map(function (index) {
- return _this8.getCell.apply(_this8, _toConsumableArray(index));
- })
- // convert to array of rows
- .reduce(function (acc, curr) {
- var rowIndex = curr.rowIndex;
-
- acc[rowIndex] = acc[rowIndex] || [];
- acc[rowIndex].push(curr.content);
-
- return acc;
- }, [])
- // join values by tab
- .map(function (row) {
- return row.join('\t');
- })
- // join rows by newline
- .join('\n');
-
- (0, _utils.copyTextToClipboard)(values);
- }
- }, {
- key: 'updateCell',
- value: function updateCell(colIndex, rowIndex, value) {
- var cell = this.datamanager.updateCell(colIndex, rowIndex, {
- content: value
- });
- this.refreshCell(cell);
- }
- }, {
- key: 'refreshCell',
- value: function refreshCell(cell) {
- var $cell = (0, _dom2.default)(cellSelector(cell.colIndex, cell.rowIndex), this.bodyScrollable);
- $cell.innerHTML = getCellContent(cell);
- }
- }, {
- key: 'isStandardCell',
- value: function isStandardCell(colIndex) {
- // Standard cells are in Sr. No and Checkbox column
- return colIndex < this.columnmanager.getFirstColumnIndex();
- }
- }, {
- key: 'getCell$',
- value: function getCell$(colIndex, rowIndex) {
- return (0, _dom2.default)(cellSelector(colIndex, rowIndex), this.bodyScrollable);
- }
- }, {
- key: 'getAboveCell$',
- value: function getAboveCell$($cell) {
- var _$$data10 = _dom2.default.data($cell),
- colIndex = _$$data10.colIndex;
-
- var $aboveRow = $cell.parentElement.previousElementSibling;
-
- return (0, _dom2.default)('[data-col-index="' + colIndex + '"]', $aboveRow);
- }
- }, {
- key: 'getBelowCell$',
- value: function getBelowCell$($cell) {
- var _$$data11 = _dom2.default.data($cell),
- colIndex = _$$data11.colIndex;
-
- var $belowRow = $cell.parentElement.nextElementSibling;
-
- return (0, _dom2.default)('[data-col-index="' + colIndex + '"]', $belowRow);
- }
- }, {
- key: 'getLeftCell$',
- value: function getLeftCell$($cell) {
- return $cell.previousElementSibling;
- }
- }, {
- key: 'getRightCell$',
- value: function getRightCell$($cell) {
- return $cell.nextElementSibling;
- }
- }, {
- key: 'getLeftMostCell$',
- value: function getLeftMostCell$(rowIndex) {
- return this.getCell$(this.columnmanager.getFirstColumnIndex(), rowIndex);
- }
- }, {
- key: 'getRightMostCell$',
- value: function getRightMostCell$(rowIndex) {
- return this.getCell$(this.columnmanager.getLastColumnIndex(), rowIndex);
- }
- }, {
- key: 'getTopMostCell$',
- value: function getTopMostCell$(colIndex) {
- return this.getCell$(colIndex, this.rowmanager.getFirstRowIndex());
- }
- }, {
- key: 'getBottomMostCell$',
- value: function getBottomMostCell$(colIndex) {
- return this.getCell$(colIndex, this.rowmanager.getLastRowIndex());
- }
- }, {
- key: 'getCell',
- value: function getCell(colIndex, rowIndex) {
- return this.instance.datamanager.getCell(colIndex, rowIndex);
- }
- }, {
- key: 'getCellAttr',
- value: function getCellAttr($cell) {
- return this.instance.getCellAttr($cell);
- }
- }, {
- key: 'getRowHeight',
- value: function getRowHeight() {
- return _dom2.default.style((0, _dom2.default)('.data-table-row', this.bodyScrollable), 'height');
- }
- }, {
- key: 'scrollToCell',
- value: function scrollToCell($cell) {
- if (_dom2.default.inViewport($cell, this.bodyScrollable)) return false;
-
- var _$$data12 = _dom2.default.data($cell),
- rowIndex = _$$data12.rowIndex;
-
- this.rowmanager.scrollToRow(rowIndex);
- return false;
- }
- }, {
- key: 'getRowCountPerPage',
- value: function getRowCountPerPage() {
- return Math.ceil(this.instance.getViewportHeight() / this.getRowHeight());
- }
- }]);
-
- return CellManager;
-}();
-
-exports.default = CellManager;
-function getCellHTML(cell) {
- var rowIndex = cell.rowIndex,
- colIndex = cell.colIndex,
- isHeader = cell.isHeader;
-
- var dataAttr = (0, _utils.makeDataAttributeString)({
- rowIndex: rowIndex,
- colIndex: colIndex,
- isHeader: isHeader
- });
-
- return '\n \n ' + getCellContent(cell) + '\n | \n ';
-}
-
-function getCellContent(cell) {
- var isHeader = cell.isHeader;
-
-
- var editable = !isHeader && cell.editable !== false;
- var editCellHTML = editable ? getEditCellHTML() : '';
-
- var sortable = isHeader && cell.sortable !== false;
- var sortIndicator = sortable ? '' : '';
-
- var resizable = isHeader && cell.resizable !== false;
- var resizeColumn = resizable ? '' : '';
-
- var hasDropdown = isHeader && cell.dropdown !== false;
- var dropdown = hasDropdown ? '' + (0, _columnmanager.getDropdownHTML)() + '
' : '';
-
- var contentHTML = !cell.isHeader && cell.column.format ? cell.column.format(cell.content) : cell.content;
-
- return '\n \n ' + contentHTML + '\n ' + sortIndicator + '\n ' + resizeColumn + '\n ' + dropdown + '\n
\n ' + editCellHTML + '\n ';
-}
-
-function getEditCellHTML() {
- return '\n \n ';
-}
-
-function cellSelector(colIndex, rowIndex) {
- return '.data-table-col[data-col-index="' + colIndex + '"][data-row-index="' + rowIndex + '"]';
-}
-
-/***/ }),
-/* 4 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
Object.defineProperty(exports, "__esModule", {
value: true
});
@@ -1609,7 +613,7 @@ exports.default = {
module.exports = exports['default'];
/***/ }),
-/* 5 */
+/* 3 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
@@ -1626,12 +630,10 @@ var _dom = __webpack_require__(0);
var _dom2 = _interopRequireDefault(_dom);
-var _sortablejs = __webpack_require__(9);
+var _sortablejs = __webpack_require__(8);
var _sortablejs2 = _interopRequireDefault(_sortablejs);
-var _rowmanager = __webpack_require__(2);
-
var _utils = __webpack_require__(1);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -1670,13 +672,13 @@ var ColumnManager = function () {
if (!(0, _dom2.default)('.data-table-col', this.header)) {
// insert html
- (0, _dom2.default)('thead', this.header).innerHTML = (0, _rowmanager.getRowHTML)(columns, { isHeader: 1 });
+ (0, _dom2.default)('thead', this.header).innerHTML = this.rowmanager.getRowHTML(columns, { isHeader: 1 });
} else {
// refresh dom state
var $cols = _dom2.default.each('.data-table-col', this.header);
if (columns.length < $cols.length) {
// deleted column
- (0, _dom2.default)('thead', this.header).innerHTML = (0, _rowmanager.getRowHTML)(columns, { isHeader: 1 });
+ (0, _dom2.default)('thead', this.header).innerHTML = this.rowmanager.getRowHTML(columns, { isHeader: 1 });
return;
}
@@ -2208,7 +1210,7 @@ var getDropdownHTML = function getDropdownHTML() {
exports.getDropdownHTML = getDropdownHTML;
/***/ }),
-/* 6 */
+/* 4 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
@@ -2218,7 +1220,7 @@ Object.defineProperty(exports, "__esModule", {
value: true
});
-var _datatable = __webpack_require__(7);
+var _datatable = __webpack_require__(5);
var _datatable2 = _interopRequireDefault(_datatable);
@@ -2234,7 +1236,7 @@ exports.default = _datatable2.default;
module.exports = exports['default'];
/***/ }),
-/* 7 */
+/* 5 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
@@ -2250,19 +1252,19 @@ var _dom = __webpack_require__(0);
var _dom2 = _interopRequireDefault(_dom);
-var _datamanager = __webpack_require__(8);
+var _datamanager = __webpack_require__(6);
var _datamanager2 = _interopRequireDefault(_datamanager);
-var _cellmanager = __webpack_require__(3);
+var _cellmanager = __webpack_require__(7);
var _cellmanager2 = _interopRequireDefault(_cellmanager);
-var _columnmanager = __webpack_require__(5);
+var _columnmanager = __webpack_require__(3);
var _columnmanager2 = _interopRequireDefault(_columnmanager);
-var _rowmanager = __webpack_require__(2);
+var _rowmanager = __webpack_require__(9);
var _rowmanager2 = _interopRequireDefault(_rowmanager);
@@ -2274,7 +1276,7 @@ var _style = __webpack_require__(12);
var _style2 = _interopRequireDefault(_style);
-var _keyboard = __webpack_require__(4);
+var _keyboard = __webpack_require__(2);
var _keyboard2 = _interopRequireDefault(_keyboard);
@@ -2347,9 +1349,6 @@ var DataTable = function () {
this.datamanager.init(data);
this.render();
this.setDimensions();
- if (this.cellmanager.$focusedCell) {
- this.cellmanager.$focusedCell.focus();
- }
}
}, {
key: 'destroy',
@@ -2486,7 +1485,7 @@ exports.default = DataTable;
module.exports = exports['default'];
/***/ }),
-/* 8 */
+/* 6 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
@@ -3115,10 +2114,1013 @@ var DataError = exports.DataError = function (_extendableBuiltin2) {
;
/***/ }),
-/* 9 */
+/* 7 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+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; }; }();
+
+var _utils = __webpack_require__(1);
+
+var _keyboard = __webpack_require__(2);
+
+var _keyboard2 = _interopRequireDefault(_keyboard);
+
+var _dom = __webpack_require__(0);
+
+var _dom2 = _interopRequireDefault(_dom);
+
+var _columnmanager = __webpack_require__(3);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var CellManager = function () {
+ function CellManager(instance) {
+ _classCallCheck(this, CellManager);
+
+ this.instance = instance;
+ this.wrapper = this.instance.wrapper;
+ this.options = this.instance.options;
+ this.style = this.instance.style;
+ this.bodyScrollable = this.instance.bodyScrollable;
+ this.columnmanager = this.instance.columnmanager;
+ this.rowmanager = this.instance.rowmanager;
+ this.datamanager = this.instance.datamanager;
+
+ this.bindEvents();
+ }
+
+ _createClass(CellManager, [{
+ key: 'bindEvents',
+ value: function bindEvents() {
+ this.bindFocusCell();
+ this.bindEditCell();
+ this.bindKeyboardSelection();
+ this.bindCopyCellContents();
+ this.bindMouseEvents();
+ }
+ }, {
+ key: 'bindFocusCell',
+ value: function bindFocusCell() {
+ this.bindKeyboardNav();
+ }
+ }, {
+ key: 'bindEditCell',
+ value: function bindEditCell() {
+ var _this = this;
+
+ this.$editingCell = null;
+
+ _dom2.default.on(this.bodyScrollable, 'dblclick', '.data-table-col', function (e, cell) {
+ _this.activateEditing(cell);
+ });
+
+ _keyboard2.default.on('enter', function (e) {
+ if (_this.$focusedCell && !_this.$editingCell) {
+ // enter keypress on focused cell
+ _this.activateEditing(_this.$focusedCell);
+ } else if (_this.$editingCell) {
+ // enter keypress on editing cell
+ _this.submitEditing();
+ _this.deactivateEditing();
+ }
+ });
+ }
+ }, {
+ key: 'bindKeyboardNav',
+ value: function bindKeyboardNav() {
+ var _this2 = this;
+
+ var focusCell = function focusCell(direction) {
+ if (!_this2.$focusedCell || _this2.$editingCell) {
+ return false;
+ }
+
+ var $cell = _this2.$focusedCell;
+
+ if (direction === 'left') {
+ $cell = _this2.getLeftCell$($cell);
+ } else if (direction === 'right' || direction === 'tab') {
+ $cell = _this2.getRightCell$($cell);
+ } else if (direction === 'up') {
+ $cell = _this2.getAboveCell$($cell);
+ } else if (direction === 'down') {
+ $cell = _this2.getBelowCell$($cell);
+ }
+
+ _this2.focusCell($cell);
+ return true;
+ };
+
+ var focusLastCell = function focusLastCell(direction) {
+ if (!_this2.$focusedCell || _this2.$editingCell) {
+ return false;
+ }
+
+ var $cell = _this2.$focusedCell;
+
+ var _$$data = _dom2.default.data($cell),
+ rowIndex = _$$data.rowIndex,
+ colIndex = _$$data.colIndex;
+
+ if (direction === 'left') {
+ $cell = _this2.getLeftMostCell$(rowIndex);
+ } else if (direction === 'right') {
+ $cell = _this2.getRightMostCell$(rowIndex);
+ } else if (direction === 'up') {
+ $cell = _this2.getTopMostCell$(colIndex);
+ } else if (direction === 'down') {
+ $cell = _this2.getBottomMostCell$(colIndex);
+ }
+
+ _this2.focusCell($cell);
+ return true;
+ };
+
+ ['left', 'right', 'up', 'down', 'tab'].map(function (direction) {
+ return _keyboard2.default.on(direction, function () {
+ return focusCell(direction);
+ });
+ });
+
+ ['left', 'right', 'up', 'down'].map(function (direction) {
+ return _keyboard2.default.on('ctrl+' + direction, function () {
+ return focusLastCell(direction);
+ });
+ });
+
+ _keyboard2.default.on('esc', function () {
+ _this2.deactivateEditing();
+ });
+ }
+ }, {
+ key: 'bindKeyboardSelection',
+ value: function bindKeyboardSelection() {
+ var _this3 = this;
+
+ var getNextSelectionCursor = function getNextSelectionCursor(direction) {
+ var $selectionCursor = _this3.getSelectionCursor();
+
+ if (direction === 'left') {
+ $selectionCursor = _this3.getLeftCell$($selectionCursor);
+ } else if (direction === 'right') {
+ $selectionCursor = _this3.getRightCell$($selectionCursor);
+ } else if (direction === 'up') {
+ $selectionCursor = _this3.getAboveCell$($selectionCursor);
+ } else if (direction === 'down') {
+ $selectionCursor = _this3.getBelowCell$($selectionCursor);
+ }
+
+ return $selectionCursor;
+ };
+
+ ['left', 'right', 'up', 'down'].map(function (direction) {
+ return _keyboard2.default.on('shift+' + direction, function () {
+ return _this3.selectArea(getNextSelectionCursor(direction));
+ });
+ });
+ }
+ }, {
+ key: 'bindCopyCellContents',
+ value: function bindCopyCellContents() {
+ var _this4 = this;
+
+ _keyboard2.default.on('ctrl+c', function () {
+ _this4.copyCellContents(_this4.$focusedCell, _this4.$selectionCursor);
+ });
+ }
+ }, {
+ key: 'bindMouseEvents',
+ value: function bindMouseEvents() {
+ var _this5 = this;
+
+ var mouseDown = null;
+
+ _dom2.default.on(this.bodyScrollable, 'mousedown', '.data-table-col', function (e) {
+ mouseDown = true;
+ _this5.focusCell((0, _dom2.default)(e.delegatedTarget));
+ });
+
+ _dom2.default.on(this.bodyScrollable, 'mouseup', function () {
+ mouseDown = false;
+ });
+
+ var selectArea = function selectArea(e) {
+ if (!mouseDown) return;
+ _this5.selectArea((0, _dom2.default)(e.delegatedTarget));
+ };
+
+ _dom2.default.on(this.bodyScrollable, 'mousemove', '.data-table-col', (0, _utils.throttle)(selectArea, 50));
+ }
+ }, {
+ key: 'focusCell',
+ value: function focusCell($cell) {
+ var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
+ _ref$skipClearSelecti = _ref.skipClearSelection,
+ skipClearSelection = _ref$skipClearSelecti === undefined ? 0 : _ref$skipClearSelecti;
+
+ if (!$cell) return;
+
+ // don't focus if already editing cell
+ if ($cell === this.$editingCell) return;
+
+ var _$$data2 = _dom2.default.data($cell),
+ colIndex = _$$data2.colIndex,
+ isHeader = _$$data2.isHeader;
+
+ if (isHeader) {
+ return;
+ }
+
+ var column = this.columnmanager.getColumn(colIndex);
+ if (column.focusable === false) {
+ return;
+ }
+
+ this.deactivateEditing();
+ if (!skipClearSelection) {
+ this.clearSelection();
+ }
+
+ if (this.$focusedCell) {
+ this.$focusedCell.classList.remove('selected');
+ }
+
+ this.$focusedCell = $cell;
+ $cell.classList.add('selected');
+
+ // so that keyboard nav works
+ $cell.focus();
+
+ this.highlightRowColumnHeader($cell);
+ this.scrollToCell($cell);
+ }
+ }, {
+ key: 'highlightRowColumnHeader',
+ value: function highlightRowColumnHeader($cell) {
+ var _$$data3 = _dom2.default.data($cell),
+ colIndex = _$$data3.colIndex,
+ rowIndex = _$$data3.rowIndex;
+
+ var _colIndex = this.datamanager.getColumnIndexById('_rowIndex');
+ var colHeaderSelector = '.data-table-header .data-table-col[data-col-index="' + colIndex + '"]';
+ var rowHeaderSelector = '.data-table-col[data-row-index="' + rowIndex + '"][data-col-index="' + _colIndex + '"]';
+
+ if (this.lastHeaders) {
+ _dom2.default.removeStyle(this.lastHeaders, 'backgroundColor');
+ }
+
+ var colHeader = (0, _dom2.default)(colHeaderSelector, this.wrapper);
+ var rowHeader = (0, _dom2.default)(rowHeaderSelector, this.wrapper);
+
+ _dom2.default.style([colHeader, rowHeader], {
+ backgroundColor: '#f5f7fa' // light-bg
+ });
+
+ this.lastHeaders = [colHeader, rowHeader];
+ }
+ }, {
+ key: 'selectAreaOnClusterChanged',
+ value: function selectAreaOnClusterChanged() {
+ if (!(this.$focusedCell && this.$selectionCursor)) return;
+
+ var _$$data4 = _dom2.default.data(this.$selectionCursor),
+ colIndex = _$$data4.colIndex,
+ rowIndex = _$$data4.rowIndex;
+
+ var $cell = this.getCell$(colIndex, rowIndex);
+
+ if (!$cell || $cell === this.$selectionCursor) return;
+
+ // selectArea needs $focusedCell
+ var fCell = _dom2.default.data(this.$focusedCell);
+ this.$focusedCell = this.getCell$(fCell.colIndex, fCell.rowIndex);
+
+ this.selectArea($cell);
+ }
+ }, {
+ key: 'focusCellOnClusterChanged',
+ value: function focusCellOnClusterChanged() {
+ if (!this.$focusedCell) return;
+
+ var _$$data5 = _dom2.default.data(this.$focusedCell),
+ colIndex = _$$data5.colIndex,
+ rowIndex = _$$data5.rowIndex;
+
+ var $cell = this.getCell$(colIndex, rowIndex);
+
+ if (!$cell) return;
+ // this function is called after selectAreaOnClusterChanged,
+ // focusCell calls clearSelection which resets the area selection
+ // so a flag to skip it
+ this.focusCell($cell, { skipClearSelection: 1 });
+ }
+ }, {
+ key: 'selectArea',
+ value: function selectArea($selectionCursor) {
+ if (!this.$focusedCell) return;
+
+ if (this._selectArea(this.$focusedCell, $selectionCursor)) {
+ // valid selection
+ this.$selectionCursor = $selectionCursor;
+ }
+ }
+ }, {
+ key: '_selectArea',
+ value: function _selectArea($cell1, $cell2) {
+ var _this6 = this;
+
+ if ($cell1 === $cell2) return false;
+
+ var cells = this.getCellsInRange($cell1, $cell2);
+ if (!cells) return false;
+
+ this.clearSelection();
+ cells.map(function (index) {
+ return _this6.getCell$.apply(_this6, _toConsumableArray(index));
+ }).map(function ($cell) {
+ return $cell.classList.add('highlight');
+ });
+ return true;
+ }
+ }, {
+ key: 'getCellsInRange',
+ value: function getCellsInRange($cell1, $cell2) {
+ var colIndex1 = void 0,
+ rowIndex1 = void 0,
+ colIndex2 = void 0,
+ rowIndex2 = void 0;
+
+ if (typeof $cell1 === 'number') {
+ var _arguments = Array.prototype.slice.call(arguments);
+
+ colIndex1 = _arguments[0];
+ rowIndex1 = _arguments[1];
+ colIndex2 = _arguments[2];
+ rowIndex2 = _arguments[3];
+ } else if ((typeof $cell1 === 'undefined' ? 'undefined' : _typeof($cell1)) === 'object') {
+
+ if (!($cell1 && $cell2)) {
+ return false;
+ }
+
+ var cell1 = _dom2.default.data($cell1);
+ var cell2 = _dom2.default.data($cell2);
+
+ colIndex1 = cell1.colIndex;
+ rowIndex1 = cell1.rowIndex;
+ colIndex2 = cell2.colIndex;
+ rowIndex2 = cell2.rowIndex;
+ }
+
+ if (rowIndex1 > rowIndex2) {
+ var _ref2 = [rowIndex2, rowIndex1];
+ rowIndex1 = _ref2[0];
+ rowIndex2 = _ref2[1];
+ }
+
+ if (colIndex1 > colIndex2) {
+ var _ref3 = [colIndex2, colIndex1];
+ colIndex1 = _ref3[0];
+ colIndex2 = _ref3[1];
+ }
+
+ if (this.isStandardCell(colIndex1) || this.isStandardCell(colIndex2)) {
+ return false;
+ }
+
+ var cells = [];
+ var colIndex = colIndex1;
+ var rowIndex = rowIndex1;
+ var rowIndices = [];
+
+ while (rowIndex <= rowIndex2) {
+ rowIndices.push(rowIndex);
+ rowIndex++;
+ }
+
+ rowIndices.map(function (rowIndex) {
+ while (colIndex <= colIndex2) {
+ cells.push([colIndex, rowIndex]);
+ colIndex++;
+ }
+ colIndex = colIndex1;
+ });
+
+ return cells;
+ }
+ }, {
+ key: 'clearSelection',
+ value: function clearSelection() {
+ _dom2.default.each('.data-table-col.highlight', this.bodyScrollable).map(function (cell) {
+ return cell.classList.remove('highlight');
+ });
+
+ this.$selectionCursor = null;
+ }
+ }, {
+ key: 'getSelectionCursor',
+ value: function getSelectionCursor() {
+ return this.$selectionCursor || this.$focusedCell;
+ }
+ }, {
+ key: 'activateEditing',
+ value: function activateEditing($cell) {
+ var _$$data6 = _dom2.default.data($cell),
+ rowIndex = _$$data6.rowIndex,
+ colIndex = _$$data6.colIndex;
+
+ var col = this.columnmanager.getColumn(colIndex);
+ if (col && (col.editable === false || col.focusable === false)) {
+ return;
+ }
+
+ var cell = this.getCell(colIndex, rowIndex);
+ if (cell && cell.editable === false) {
+ return;
+ }
+
+ if (this.$editingCell) {
+ var _$$data7 = _dom2.default.data(this.$editingCell),
+ _rowIndex = _$$data7._rowIndex,
+ _colIndex = _$$data7._colIndex;
+
+ if (rowIndex === _rowIndex && colIndex === _colIndex) {
+ // editing the same cell
+ return;
+ }
+ }
+
+ this.$editingCell = $cell;
+ $cell.classList.add('editing');
+
+ var $editCell = (0, _dom2.default)('.edit-cell', $cell);
+ $editCell.innerHTML = '';
+
+ var editor = this.getEditor(colIndex, rowIndex, cell.content, $editCell);
+
+ if (editor) {
+ this.currentCellEditor = editor;
+ // initialize editing input with cell value
+ editor.initValue(cell.content, rowIndex, col);
+ }
+ }
+ }, {
+ key: 'deactivateEditing',
+ value: function deactivateEditing() {
+ // keep focus on the cell so that keyboard navigation works
+ if (this.$focusedCell) this.$focusedCell.focus();
+
+ if (!this.$editingCell) return;
+ this.$editingCell.classList.remove('editing');
+ this.$editingCell = null;
+ }
+ }, {
+ key: 'getEditor',
+ value: function getEditor(colIndex, rowIndex, value, parent) {
+ // debugger;
+ var obj = this.options.getEditor(colIndex, rowIndex, value, parent);
+ if (obj && obj.setValue) return obj;
+
+ // editing fallback
+ var $input = _dom2.default.create('input', {
+ type: 'text',
+ inside: parent
+ });
+
+ return {
+ initValue: function initValue(value) {
+ $input.focus();
+ $input.value = value;
+ },
+ getValue: function getValue() {
+ return $input.value;
+ },
+ setValue: function setValue(value) {
+ $input.value = value;
+ }
+ };
+ }
+ }, {
+ key: 'submitEditing',
+ value: function submitEditing() {
+ var _this7 = this;
+
+ if (!this.$editingCell) return;
+ var $cell = this.$editingCell;
+
+ var _$$data8 = _dom2.default.data($cell),
+ rowIndex = _$$data8.rowIndex,
+ colIndex = _$$data8.colIndex;
+
+ var col = this.datamanager.getColumn(colIndex);
+
+ if ($cell) {
+ var editor = this.currentCellEditor;
+
+ if (editor) {
+ var value = editor.getValue();
+ var done = editor.setValue(value, rowIndex, col);
+ var oldValue = this.getCell(colIndex, rowIndex).content;
+
+ // update cell immediately
+ this.updateCell(colIndex, rowIndex, value);
+ $cell.focus();
+
+ if (done && done.then) {
+ // revert to oldValue if promise fails
+ done.catch(function (e) {
+ console.log(e);
+ _this7.updateCell(colIndex, rowIndex, oldValue);
+ });
+ }
+ }
+ }
+
+ this.currentCellEditor = null;
+ }
+ }, {
+ key: 'copyCellContents',
+ value: function copyCellContents($cell1, $cell2) {
+ var _this8 = this;
+
+ if (!$cell2 && $cell1) {
+ // copy only focusedCell
+ var _$$data9 = _dom2.default.data($cell1),
+ colIndex = _$$data9.colIndex,
+ rowIndex = _$$data9.rowIndex;
+
+ var cell = this.getCell(colIndex, rowIndex);
+ (0, _utils.copyTextToClipboard)(cell.content);
+ return;
+ }
+ var cells = this.getCellsInRange($cell1, $cell2);
+
+ if (!cells) return;
+
+ var values = cells
+ // get cell objects
+ .map(function (index) {
+ return _this8.getCell.apply(_this8, _toConsumableArray(index));
+ })
+ // convert to array of rows
+ .reduce(function (acc, curr) {
+ var rowIndex = curr.rowIndex;
+
+ acc[rowIndex] = acc[rowIndex] || [];
+ acc[rowIndex].push(curr.content);
+
+ return acc;
+ }, [])
+ // join values by tab
+ .map(function (row) {
+ return row.join('\t');
+ })
+ // join rows by newline
+ .join('\n');
+
+ (0, _utils.copyTextToClipboard)(values);
+ }
+ }, {
+ key: 'updateCell',
+ value: function updateCell(colIndex, rowIndex, value) {
+ var cell = this.datamanager.updateCell(colIndex, rowIndex, {
+ content: value
+ });
+ this.refreshCell(cell);
+ }
+ }, {
+ key: 'refreshCell',
+ value: function refreshCell(cell) {
+ var $cell = (0, _dom2.default)(this.cellSelector(cell.colIndex, cell.rowIndex), this.bodyScrollable);
+ $cell.innerHTML = this.getCellContent(cell);
+ }
+ }, {
+ key: 'isStandardCell',
+ value: function isStandardCell(colIndex) {
+ // Standard cells are in Sr. No and Checkbox column
+ return colIndex < this.columnmanager.getFirstColumnIndex();
+ }
+ }, {
+ key: 'getCell$',
+ value: function getCell$(colIndex, rowIndex) {
+ return (0, _dom2.default)(this.cellSelector(colIndex, rowIndex), this.bodyScrollable);
+ }
+ }, {
+ key: 'getAboveCell$',
+ value: function getAboveCell$($cell) {
+ var _$$data10 = _dom2.default.data($cell),
+ colIndex = _$$data10.colIndex;
+
+ var $aboveRow = $cell.parentElement.previousElementSibling;
+
+ return (0, _dom2.default)('[data-col-index="' + colIndex + '"]', $aboveRow);
+ }
+ }, {
+ key: 'getBelowCell$',
+ value: function getBelowCell$($cell) {
+ var _$$data11 = _dom2.default.data($cell),
+ colIndex = _$$data11.colIndex;
+
+ var $belowRow = $cell.parentElement.nextElementSibling;
+
+ return (0, _dom2.default)('[data-col-index="' + colIndex + '"]', $belowRow);
+ }
+ }, {
+ key: 'getLeftCell$',
+ value: function getLeftCell$($cell) {
+ return $cell.previousElementSibling;
+ }
+ }, {
+ key: 'getRightCell$',
+ value: function getRightCell$($cell) {
+ return $cell.nextElementSibling;
+ }
+ }, {
+ key: 'getLeftMostCell$',
+ value: function getLeftMostCell$(rowIndex) {
+ return this.getCell$(this.columnmanager.getFirstColumnIndex(), rowIndex);
+ }
+ }, {
+ key: 'getRightMostCell$',
+ value: function getRightMostCell$(rowIndex) {
+ return this.getCell$(this.columnmanager.getLastColumnIndex(), rowIndex);
+ }
+ }, {
+ key: 'getTopMostCell$',
+ value: function getTopMostCell$(colIndex) {
+ return this.getCell$(colIndex, this.rowmanager.getFirstRowIndex());
+ }
+ }, {
+ key: 'getBottomMostCell$',
+ value: function getBottomMostCell$(colIndex) {
+ return this.getCell$(colIndex, this.rowmanager.getLastRowIndex());
+ }
+ }, {
+ key: 'getCell',
+ value: function getCell(colIndex, rowIndex) {
+ return this.instance.datamanager.getCell(colIndex, rowIndex);
+ }
+ }, {
+ key: 'getCellAttr',
+ value: function getCellAttr($cell) {
+ return this.instance.getCellAttr($cell);
+ }
+ }, {
+ key: 'getRowHeight',
+ value: function getRowHeight() {
+ return _dom2.default.style((0, _dom2.default)('.data-table-row', this.bodyScrollable), 'height');
+ }
+ }, {
+ key: 'scrollToCell',
+ value: function scrollToCell($cell) {
+ if (_dom2.default.inViewport($cell, this.bodyScrollable)) return false;
+
+ var _$$data12 = _dom2.default.data($cell),
+ rowIndex = _$$data12.rowIndex;
+
+ this.rowmanager.scrollToRow(rowIndex);
+ return false;
+ }
+ }, {
+ key: 'getRowCountPerPage',
+ value: function getRowCountPerPage() {
+ return Math.ceil(this.instance.getViewportHeight() / this.getRowHeight());
+ }
+ }, {
+ key: 'getCellHTML',
+ value: function getCellHTML(cell) {
+ var rowIndex = cell.rowIndex,
+ colIndex = cell.colIndex,
+ isHeader = cell.isHeader;
+
+ var dataAttr = (0, _utils.makeDataAttributeString)({
+ rowIndex: rowIndex,
+ colIndex: colIndex,
+ isHeader: isHeader
+ });
+
+ return '\n \n ' + this.getCellContent(cell) + '\n | \n ';
+ }
+ }, {
+ key: 'getCellContent',
+ value: function getCellContent(cell) {
+ var isHeader = cell.isHeader;
+
+
+ var editable = !isHeader && cell.editable !== false;
+ var editCellHTML = editable ? this.getEditCellHTML() : '';
+
+ var sortable = isHeader && cell.sortable !== false;
+ var sortIndicator = sortable ? '' : '';
+
+ var resizable = isHeader && cell.resizable !== false;
+ var resizeColumn = resizable ? '' : '';
+
+ var hasDropdown = isHeader && cell.dropdown !== false;
+ var dropdown = hasDropdown ? '' + (0, _columnmanager.getDropdownHTML)() + '
' : '';
+
+ var contentHTML = !cell.isHeader && cell.column.format ? cell.column.format(cell.content) : cell.content;
+
+ return '\n \n ' + contentHTML + '\n ' + sortIndicator + '\n ' + resizeColumn + '\n ' + dropdown + '\n
\n ' + editCellHTML + '\n ';
+ }
+ }, {
+ key: 'getEditCellHTML',
+ value: function getEditCellHTML() {
+ return '\n \n ';
+ }
+ }, {
+ key: 'cellSelector',
+ value: function cellSelector(colIndex, rowIndex) {
+ return '.data-table-col[data-col-index="' + colIndex + '"][data-row-index="' + rowIndex + '"]';
+ }
+ }]);
+
+ return CellManager;
+}();
+
+exports.default = CellManager;
+module.exports = exports['default'];
+
+/***/ }),
+/* 8 */
/***/ (function(module, exports) {
-module.exports = __WEBPACK_EXTERNAL_MODULE_9__;
+module.exports = __WEBPACK_EXTERNAL_MODULE_8__;
+
+/***/ }),
+/* 9 */
+/***/ (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; }; }();
+
+var _dom = __webpack_require__(0);
+
+var _dom2 = _interopRequireDefault(_dom);
+
+var _utils = __webpack_require__(1);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var RowManager = function () {
+ function RowManager(instance) {
+ _classCallCheck(this, RowManager);
+
+ this.instance = instance;
+ this.options = this.instance.options;
+ this.wrapper = this.instance.wrapper;
+ this.bodyScrollable = this.instance.bodyScrollable;
+
+ this.bindEvents();
+ this.refreshRows = (0, _utils.promisify)(this.refreshRows, this);
+ }
+
+ _createClass(RowManager, [{
+ key: 'bindEvents',
+ value: function bindEvents() {
+ this.bindCheckbox();
+ }
+ }, {
+ key: 'bindCheckbox',
+ value: function bindCheckbox() {
+ var _this = this;
+
+ if (!this.options.addCheckboxColumn) return;
+
+ // map of checked rows
+ this.checkMap = [];
+
+ _dom2.default.on(this.wrapper, 'click', '.data-table-col[data-col-index="0"] [type="checkbox"]', function (e, $checkbox) {
+ var $cell = $checkbox.closest('.data-table-col');
+
+ var _$$data = _dom2.default.data($cell),
+ rowIndex = _$$data.rowIndex,
+ isHeader = _$$data.isHeader;
+
+ var checked = $checkbox.checked;
+
+ if (isHeader) {
+ _this.checkAll(checked);
+ } else {
+ _this.checkRow(rowIndex, checked);
+ }
+ });
+ }
+ }, {
+ key: 'refreshRows',
+ value: function refreshRows() {
+ this.instance.renderBody();
+ this.instance.setDimensions();
+ }
+ }, {
+ key: 'refreshRow',
+ value: function refreshRow(row, rowIndex) {
+ var _this2 = this;
+
+ var _row = this.datamanager.updateRow(row, rowIndex);
+
+ _row.forEach(function (cell) {
+ _this2.cellmanager.refreshCell(cell);
+ });
+ }
+ }, {
+ key: 'getCheckedRows',
+ value: function getCheckedRows() {
+ if (!this.checkMap) {
+ return [];
+ }
+
+ 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 _this3 = this;
+
+ this.getCheckedRows().map(function (rowIndex) {
+ return _this3.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
+ _dom2.default.each('.data-table-col[data-row-index="' + rowIndex + '"][data-col-index="0"] [type="checkbox"]', this.bodyScrollable).map(function (input) {
+ input.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
+ _dom2.default.each('.data-table-col[data-col-index="0"] [type="checkbox"]', this.bodyScrollable).map(function (input) {
+ input.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.getRow$(rowIndex);
+ if (!$row) return;
+
+ if (!toggle && this.bodyScrollable.classList.contains('row-highlight-all')) {
+ $row.classList.add('row-unhighlight');
+ return;
+ }
+
+ if (toggle && $row.classList.contains('row-unhighlight')) {
+ $row.classList.remove('row-unhighlight');
+ }
+
+ this._highlightedRows = this._highlightedRows || {};
+
+ if (toggle) {
+ $row.classList.add('row-highlight');
+ this._highlightedRows[rowIndex] = $row;
+ } else {
+ $row.classList.remove('row-highlight');
+ delete this._highlightedRows[rowIndex];
+ }
+ }
+ }, {
+ key: 'highlightAll',
+ value: function highlightAll() {
+ var toggle = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
+
+ if (toggle) {
+ this.bodyScrollable.classList.add('row-highlight-all');
+ } else {
+ this.bodyScrollable.classList.remove('row-highlight-all');
+ for (var rowIndex in this._highlightedRows) {
+ var $row = this._highlightedRows[rowIndex];
+ $row.classList.remove('row-highlight');
+ }
+ this._highlightedRows = {};
+ }
+ }
+ }, {
+ key: 'getRow$',
+ value: function getRow$(rowIndex) {
+ return (0, _dom2.default)('.data-table-row[data-row-index="' + rowIndex + '"]', this.bodyScrollable);
+ }
+ }, {
+ key: 'getTotalRows',
+ value: function getTotalRows() {
+ return this.datamanager.getRowCount();
+ }
+ }, {
+ key: 'getFirstRowIndex',
+ value: function getFirstRowIndex() {
+ return 0;
+ }
+ }, {
+ key: 'getLastRowIndex',
+ value: function getLastRowIndex() {
+ return this.datamanager.getRowCount() - 1;
+ }
+ }, {
+ key: 'scrollToRow',
+ value: function scrollToRow(rowIndex) {
+ rowIndex = +rowIndex;
+ this._lastScrollTo = this._lastScrollTo || 0;
+ var $row = this.getRow$(rowIndex);
+ if (_dom2.default.inViewport($row, this.bodyScrollable)) return;
+
+ var _$row$getBoundingClie = $row.getBoundingClientRect(),
+ height = _$row$getBoundingClie.height;
+
+ var _bodyScrollable$getBo = this.bodyScrollable.getBoundingClientRect(),
+ top = _bodyScrollable$getBo.top,
+ bottom = _bodyScrollable$getBo.bottom;
+
+ var rowsInView = Math.floor((bottom - top) / height);
+
+ var offset = 0;
+ if (rowIndex > this._lastScrollTo) {
+ offset = height * (rowIndex + 1 - rowsInView);
+ } else {
+ offset = height * (rowIndex + 1 - 1);
+ }
+
+ this._lastScrollTo = rowIndex;
+ _dom2.default.scrollTop(this.bodyScrollable, offset);
+ }
+ }, {
+ key: 'getRowHTML',
+ value: function getRowHTML(row, props) {
+ var _this4 = this;
+
+ var dataAttr = (0, _utils.makeDataAttributeString)(props);
+
+ return '\n \n ' + row.map(function (cell) {
+ return _this4.cellmanager.getCellHTML(cell);
+ }).join('') + '\n
\n ';
+ }
+ }, {
+ key: 'datamanager',
+ get: function get() {
+ return this.instance.datamanager;
+ }
+ }, {
+ key: 'cellmanager',
+ get: function get() {
+ return this.instance.cellmanager;
+ }
+ }]);
+
+ return RowManager;
+}();
+
+exports.default = RowManager;
+module.exports = exports['default'];
/***/ }),
/* 10 */
@@ -3143,8 +3145,6 @@ var _clusterize = __webpack_require__(11);
var _clusterize2 = _interopRequireDefault(_clusterize);
-var _rowmanager = __webpack_require__(2);
-
var _utils = __webpack_require__(1);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -3238,8 +3238,10 @@ var BodyRenderer = function () {
}, {
key: 'getDataForClusterize',
value: function getDataForClusterize(rows) {
+ var _this2 = this;
+
return rows.map(function (row) {
- return (0, _rowmanager.getRowHTML)(row, { rowIndex: row[0].rowIndex });
+ return _this2.rowmanager.getRowHTML(row, { rowIndex: row[0].rowIndex });
});
}
}]);
@@ -3251,8 +3253,10 @@ exports.default = BodyRenderer;
;
function getBodyHTML(rows) {
+ var _this3 = this;
+
return '\n \n ' + rows.map(function (row) {
- return (0, _rowmanager.getRowHTML)(row, { rowIndex: row[0].rowIndex });
+ return _this3.rowmanager.getRowHTML(row, { rowIndex: row[0].rowIndex });
}).join('') + '\n \n ';
}
@@ -3374,7 +3378,7 @@ exports.default = {
none: ''
},
freezeMessage: '',
- editing: function editing() {},
+ getEditor: function getEditor() {},
addSerialNoColumn: true,
addCheckboxColumn: false,
enableClusterize: true,
@@ -3424,7 +3428,7 @@ exports = module.exports = __webpack_require__(16)(false);
// module
-exports.push([module.i, "/* variables */\n/* resets */\n*, *::after, *::before {\n box-sizing: border-box; }\n\n.data-table button, .data-table input {\n overflow: visible;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n margin: 0;\n padding: 0; }\n\n/* styling */\n.data-table *, .data-table *:focus {\n outline: none !important;\n border-radius: 0px;\n box-shadow: none; }\n\n.data-table {\n width: 100%;\n position: relative;\n overflow: auto; }\n .data-table table {\n border-collapse: collapse; }\n .data-table table td {\n padding: 0;\n border: 1px solid #d1d8dd; }\n .data-table thead td {\n border-bottom-width: 1px; }\n .data-table .freeze-container {\n display: flex;\n justify-content: center;\n align-content: center;\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n background-color: #f5f7fa;\n opacity: 0.5;\n font-size: 2em; }\n .data-table .freeze-container span {\n position: absolute;\n top: 50%;\n transform: translateY(-50%); }\n .data-table .trash-container {\n position: absolute;\n bottom: 0;\n left: 30%;\n right: 30%;\n height: 70px;\n background: palevioletred;\n opacity: 0.5; }\n\n.body-scrollable {\n max-height: 500px;\n overflow: auto;\n border-bottom: 1px solid #d1d8dd; }\n .body-scrollable.row-highlight-all .data-table-row:not(.row-unhighlight) {\n background-color: #f5f7fa; }\n\n.data-table-header {\n position: absolute;\n top: 0;\n left: 0;\n background-color: white;\n font-weight: bold; }\n .data-table-header .content span:not(.column-resizer) {\n cursor: pointer; }\n .data-table-header .column-resizer {\n display: none;\n position: absolute;\n right: 0;\n top: 0;\n width: 0.25rem;\n height: 100%;\n background-color: #5292f7;\n cursor: col-resize; }\n .data-table-header .data-table-dropdown {\n position: absolute;\n right: 10px;\n display: inline-flex;\n vertical-align: top;\n text-align: left; }\n .data-table-header .data-table-dropdown.is-active .data-table-dropdown-list {\n display: block; }\n .data-table-header .data-table-dropdown.is-active .data-table-dropdown-toggle {\n display: block; }\n .data-table-header .data-table-dropdown-toggle {\n display: none;\n background-color: transparent;\n border: none; }\n .data-table-header .data-table-dropdown-list {\n display: none;\n font-weight: normal;\n position: absolute;\n min-width: 8rem;\n top: 100%;\n right: 0;\n z-index: 1;\n background-color: white;\n border-radius: 3px;\n box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1);\n padding-bottom: 0.5rem;\n padding-top: 0.5rem; }\n .data-table-header .data-table-dropdown-list > div {\n padding: 0.5rem 1rem; }\n .data-table-header .data-table-dropdown-list > div:hover {\n background-color: #f5f7fa; }\n .data-table-header .data-table-col.remove-column {\n background-color: #FD8B8B;\n transition: 300ms background-color ease-in-out; }\n .data-table-header .data-table-col.sortable-chosen {\n background-color: #f5f7fa; }\n\n.data-table-col {\n position: relative; }\n .data-table-col .content {\n padding: 0.25rem;\n border: 2px solid transparent; }\n .data-table-col .content.ellipsis {\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden; }\n .data-table-col .edit-cell {\n display: none;\n padding: 0.25rem;\n background: #fff;\n z-index: 1;\n height: 100%; }\n .data-table-col .edit-cell input {\n outline: none;\n width: 100%;\n border: none; }\n .data-table-col.selected .content {\n border: 2px solid #5292f7; }\n .data-table-col.editing .content {\n display: none; }\n .data-table-col.editing .edit-cell {\n border: 2px solid #5292f7;\n display: block; }\n .data-table-col.highlight {\n background-color: #f5f7fa; }\n .data-table-col:hover .column-resizer {\n display: inline-block; }\n .data-table-col:hover .data-table-dropdown-toggle {\n display: block; }\n\n.data-table-row.row-highlight {\n background-color: #f5f7fa; }\n\n.noselect {\n -webkit-touch-callout: none;\n -webkit-user-select: none;\n -khtml-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none; }\n\nbody.data-table-resize {\n cursor: col-resize; }\n", ""]);
+exports.push([module.i, "/* variables */\n.data-table {\n /* resets */\n /* styling */\n width: 100%;\n position: relative;\n overflow: auto; }\n .data-table *, .data-table *::after, .data-table *::before {\n box-sizing: border-box; }\n .data-table button, .data-table input {\n overflow: visible;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n margin: 0;\n padding: 0; }\n .data-table *, .data-table *:focus {\n outline: none;\n border-radius: 0px;\n box-shadow: none; }\n .data-table table {\n border-collapse: collapse; }\n .data-table table td {\n padding: 0;\n border: 1px solid #d1d8dd; }\n .data-table thead td {\n border-bottom-width: 1px; }\n .data-table .freeze-container {\n display: flex;\n justify-content: center;\n align-content: center;\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n background-color: #f5f7fa;\n opacity: 0.5;\n font-size: 2em; }\n .data-table .freeze-container span {\n position: absolute;\n top: 50%;\n transform: translateY(-50%); }\n .data-table .trash-container {\n position: absolute;\n bottom: 0;\n left: 30%;\n right: 30%;\n height: 70px;\n background: palevioletred;\n opacity: 0.5; }\n\n.body-scrollable {\n max-height: 500px;\n overflow: auto;\n border-bottom: 1px solid #d1d8dd; }\n .body-scrollable.row-highlight-all .data-table-row:not(.row-unhighlight) {\n background-color: #f5f7fa; }\n\n.data-table-header {\n position: absolute;\n top: 0;\n left: 0;\n background-color: white;\n font-weight: bold; }\n .data-table-header .content span:not(.column-resizer) {\n cursor: pointer; }\n .data-table-header .column-resizer {\n display: none;\n position: absolute;\n right: 0;\n top: 0;\n width: 0.25rem;\n height: 100%;\n background-color: #5292f7;\n cursor: col-resize; }\n .data-table-header .data-table-dropdown {\n position: absolute;\n right: 10px;\n display: inline-flex;\n vertical-align: top;\n text-align: left; }\n .data-table-header .data-table-dropdown.is-active .data-table-dropdown-list {\n display: block; }\n .data-table-header .data-table-dropdown.is-active .data-table-dropdown-toggle {\n display: block; }\n .data-table-header .data-table-dropdown-toggle {\n display: none;\n background-color: transparent;\n border: none; }\n .data-table-header .data-table-dropdown-list {\n display: none;\n font-weight: normal;\n position: absolute;\n min-width: 8rem;\n top: 100%;\n right: 0;\n z-index: 1;\n background-color: white;\n border-radius: 3px;\n box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1);\n padding-bottom: 0.5rem;\n padding-top: 0.5rem; }\n .data-table-header .data-table-dropdown-list > div {\n padding: 0.5rem 1rem; }\n .data-table-header .data-table-dropdown-list > div:hover {\n background-color: #f5f7fa; }\n .data-table-header .data-table-col.remove-column {\n background-color: #FD8B8B;\n transition: 300ms background-color ease-in-out; }\n .data-table-header .data-table-col.sortable-chosen {\n background-color: #f5f7fa; }\n\n.data-table-col {\n position: relative; }\n .data-table-col .content {\n padding: 0.25rem;\n border: 2px solid transparent; }\n .data-table-col .content.ellipsis {\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden; }\n .data-table-col .edit-cell {\n display: none;\n padding: 0.25rem;\n background: #fff;\n z-index: 1;\n height: 100%; }\n .data-table-col .edit-cell input {\n outline: none;\n width: 100%;\n border: none; }\n .data-table-col.selected .content {\n border: 2px solid #5292f7; }\n .data-table-col.editing .content {\n display: none; }\n .data-table-col.editing .edit-cell {\n border: 2px solid #5292f7;\n display: block; }\n .data-table-col.highlight {\n background-color: #f5f7fa; }\n .data-table-col:hover .column-resizer {\n display: inline-block; }\n .data-table-col:hover .data-table-dropdown-toggle {\n display: block; }\n\n.data-table-row.row-highlight {\n background-color: #f5f7fa; }\n\n.noselect {\n -webkit-touch-callout: none;\n -webkit-user-select: none;\n -khtml-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none; }\n\nbody.data-table-resize {\n cursor: col-resize; }\n", ""]);
// exports
diff --git a/lib/frappe-datatable.js.map b/lib/frappe-datatable.js.map
index 833700b..469c28c 100644
--- a/lib/frappe-datatable.js.map
+++ b/lib/frappe-datatable.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 6d287d6504123700138c","webpack:///./src/dom.js","webpack:///./src/utils.js","webpack:///./src/rowmanager.js","webpack:///./src/cellmanager.js","webpack:///./src/keyboard.js","webpack:///./src/columnmanager.js","webpack:///./src/index.js","webpack:///./src/datatable.js","webpack:///./src/datamanager.js","webpack:///external {\"commonjs\":\"sortablejs\",\"commonjs2\":\"sortablejs\",\"root\":\"Sortable\"}","webpack:///./src/body-renderer.js","webpack:///external {\"commonjs\":\"clusterize.js\",\"commonjs2\":\"clusterize.js\",\"root\":\"Clusterize\"}","webpack:///./src/style.js","webpack:///./src/defaults.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":["$","expr","con","document","querySelector","each","Array","from","querySelectorAll","create","tag","o","element","createElement","i","val","appendChild","ref","parentNode","insertBefore","Object","keys","map","style","prop","setAttribute","on","event","selector","callback","bind","delegate","off","handler","removeEventListener","split","forEach","addEventListener","e","delegatedTarget","target","closest","call","unbind","fire","type","properties","evt","createEvent","initEvent","j","dispatchEvent","data","attrs","dataset","attr","elements","styleMap","getStyle","isArray","removeStyle","styleProps","getComputedStyle","includes","parseFloat","matches","inViewport","el","parentEl","getBoundingClientRect","top","left","bottom","right","pTop","pLeft","pBottom","pRight","scrollTop","pixels","requestAnimationFrame","camelCaseToDash","makeDataAttributeString","getDefault","escapeRegExp","getCSSString","getCSSRuleBlock","buildCSSRule","removeCSSRule","copyTextToClipboard","isNumeric","throttle","promisify","chainPromises","str","replace","g","toLowerCase","props","key","_key","undefined","join","trim","a","b","hasOwnProperty","rule","cssRulesString","rulePatternStr","rulePattern","RegExp","match","property","value","propPattern","propertyStr","valueStr","replacer","output","text","textArea","position","width","height","padding","border","outline","boxShadow","background","body","select","execCommand","err","console","log","removeChild","isNaN","func","wait","options","context","args","result","timeout","previous","later","leading","Date","now","apply","remaining","arguments","clearTimeout","trailing","setTimeout","fn","Promise","resolve","name","promises","reduce","prev","cur","then","getRowHTML","RowManager","instance","wrapper","bodyScrollable","bindEvents","refreshRows","bindCheckbox","addCheckboxColumn","checkMap","$checkbox","$cell","rowIndex","isHeader","checked","checkAll","checkRow","renderBody","setDimensions","row","_row","datamanager","updateRow","cellmanager","refreshCell","cell","c","filter","getCheckedRows","toggle","input","highlightRow","getTotalRows","highlightAll","$row","getRow$","classList","contains","add","remove","_highlightedRows","getRowCount","_lastScrollTo","rowsInView","Math","floor","offset","dataAttr","getCellHTML","getCellContent","getEditCellHTML","CellManager","columnmanager","rowmanager","bindFocusCell","bindEditCell","bindKeyboardSelection","bindCopyCellContents","bindMouseEvents","bindKeyboardNav","$editingCell","activateEditing","$focusedCell","submitEditing","deactivateEditing","focusCell","direction","getLeftCell$","getRightCell$","getAboveCell$","getBelowCell$","focusLastCell","colIndex","getLeftMostCell$","getRightMostCell$","getTopMostCell$","getBottomMostCell$","getNextSelectionCursor","$selectionCursor","getSelectionCursor","selectArea","copyCellContents","mouseDown","skipClearSelection","column","getColumn","focusable","clearSelection","highlightRowColumnHeader","scrollToCell","_colIndex","getColumnIndexById","colHeaderSelector","rowHeaderSelector","lastHeaders","colHeader","rowHeader","backgroundColor","getCell$","fCell","_selectArea","$cell1","$cell2","cells","getCellsInRange","index","colIndex1","rowIndex1","colIndex2","rowIndex2","cell1","cell2","isStandardCell","rowIndices","push","col","editable","getCell","_rowIndex","$editCell","innerHTML","editing","getEditingObject","content","currentCellEditing","initValue","focus","parent","obj","setValue","$input","inside","getValue","done","oldValue","updateCell","catch","values","acc","curr","cellSelector","getFirstColumnIndex","$aboveRow","parentElement","previousElementSibling","$belowRow","nextElementSibling","getLastColumnIndex","getFirstRowIndex","getLastRowIndex","getCellAttr","scrollToRow","ceil","getViewportHeight","getRowHeight","editCellHTML","sortable","sortIndicator","resizable","resizeColumn","hasDropdown","dropdown","contentHTML","format","KEYCODES","initDone","handlers","dom","keyCode","shiftKey","ctrlKey","metaKey","_handlers","length","preventBubbling","preventDefault","init","k","ColumnManager","fireEvent","header","getDropdownHTML","dropdownButton","refreshHeader","columns","getColumns","$cols","$col","sortOrder","$columnMap","bindDropdown","bindResizeColumn","bindMoveColumn","$activeDropdown","$button","$dropdown","deactivateDropdown","dropdownItems","headerDropdown","$item","action","isDragging","$resizingCell","startWidth","startX","$handle","pageX","setColumnWidth","setBodyWidth","finalWidth","getColumnMinWidth","updateColumn","setColumnHeaderWidth","initialized","initialize","ready","$parent","onEnd","oldIndex","newIndex","$draggedCell","item","switchColumn","preventOnFilter","animation","span","textContent","nextSortOrder","sortColumn","freeze","sortRows","unfreeze","removedCol","removeColumn","setHeaderStyle","setupMinWidth","setupNaturalColumnWidth","distributeRemainingWidth","setColumnStyle","setDefaultCellHeight","takeAvailableSpace","margin","nonResizableColumnsSelector","setStyle","cursor","minWidth","wrapperWidth","datatableWrapper","headerWidth","resizableColumns","deltaWidth","getColumnHeaderElement","min","__cellHeightSet","setCellHeight","align","_columnWidthMap","styles","$column","addSerialNoColumn","getColumnCount","findIndex","d","label","__version__","version","DataTable","instances","HTMLElement","Error","assign","concat","events","prepare","bodyRenderer","refresh","prepareDom","freezeMessage","freezeContainer","render","destroy","rows","appendRows","refreshRow","renderHeader","marginTop","viewportHeight","scrollLeft","display","eventName","enableLogs","DataManager","rowCount","prepareColumns","prepareRows","prepareNumericColumns","validateColumns","prepareDefaultColumns","prepareHeader","hasColumnById","id","getCheckboxHTML","baseRowCell","prepareCell","baseCell","row0","getRow","cellValue","validateData","_getNextRowCount","prepareRow","DataError","_sortRows","currentSort","reverseArray","sort","_aIndex","_bIndex","_a","_b","srNoColIndex","array","temporary","index1","index2","temp","newCell1","newCell2","newRow","newVal","keyValPairs","start","end","slice","skipStandardColumns","getStandardColumnCount","find","Boolean","TypeError","getBodyHTML","BodyRenderer","appendRemainingData","enableClusterize","renderBodyWithClusterize","renderBodyHTML","getRows","restoreState","initialData","getDataForClusterize","clusterize","scrollElem","contentElem","callbacks","clusterChanged","no_data_text","loadingText","no_data_class","update","highlightCheckedRows","selectAreaOnClusterChanged","focusCellOnClusterChanged","append","Style","datatable","scopeClass","constructor","styleEl","styleSheet","sheet","ruleString","_index","cssRules","deleteRule","insertRule","onRemoveColumn","onSwitchColumn","column1","column2","onSortColumn","asc","desc","none"],"mappings":"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;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,2QAA2Q,oBAAoB,wZAAwZ,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(require(\"sortablejs\"), require(\"clusterize.js\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"DataTable\", [, ], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"DataTable\"] = factory(require(\"sortablejs\"), require(\"clusterize.js\"));\n\telse\n\t\troot[\"DataTable\"] = factory(root[\"Sortable\"], root[\"Clusterize\"]);\n})(typeof self !== 'undefined' ? self : this, function(__WEBPACK_EXTERNAL_MODULE_9__, __WEBPACK_EXTERNAL_MODULE_11__) {\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 = 6);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 6d287d6504123700138c","\nexport default function $(expr, con) {\n return typeof expr === 'string' ?\n (con || document).querySelector(expr) :\n expr || null;\n}\n\n$.each = (expr, con) => {\n return typeof expr === 'string' ?\n Array.from((con || document).querySelectorAll(expr)) :\n expr || null;\n};\n\n$.create = (tag, o) => {\n let element = document.createElement(tag);\n\n for (let i in o) {\n let val = o[i];\n\n if (i === 'inside') {\n $(val).appendChild(element);\n } else\n if (i === 'around') {\n let ref = $(val);\n ref.parentNode.insertBefore(element, ref);\n element.appendChild(ref);\n } else\n if (i === 'styles') {\n if (typeof val === 'object') {\n Object.keys(val).map(prop => {\n element.style[prop] = val[prop];\n });\n }\n } else\n if (i in element) {\n element[i] = val;\n } else {\n element.setAttribute(i, val);\n }\n }\n\n return element;\n};\n\n$.on = (element, event, selector, callback) => {\n if (!callback) {\n callback = selector;\n $.bind(element, event, callback);\n } else {\n $.delegate(element, event, selector, callback);\n }\n};\n\n$.off = (element, event, handler) => {\n element.removeEventListener(event, handler);\n};\n\n$.bind = (element, event, callback) => {\n event.split(/\\s+/).forEach(function (event) {\n element.addEventListener(event, callback);\n });\n};\n\n$.delegate = (element, event, selector, callback) => {\n element.addEventListener(event, function (e) {\n const delegatedTarget = e.target.closest(selector);\n if (delegatedTarget) {\n e.delegatedTarget = delegatedTarget;\n callback.call(this, e, delegatedTarget);\n }\n });\n};\n\n$.unbind = (element, o) => {\n if (element) {\n for (let event in o) {\n let callback = o[event];\n\n event.split(/\\s+/).forEach(function (event) {\n element.removeEventListener(event, callback);\n });\n }\n }\n};\n\n$.fire = (target, type, properties) => {\n let evt = document.createEvent('HTMLEvents');\n\n evt.initEvent(type, true, true);\n\n for (let j in properties) {\n evt[j] = properties[j];\n }\n\n return target.dispatchEvent(evt);\n};\n\n$.data = (element, attrs) => { // eslint-disable-line\n if (!attrs) {\n return element.dataset;\n }\n\n for (const attr in attrs) {\n element.dataset[attr] = attrs[attr];\n }\n};\n\n$.style = (elements, styleMap) => { // eslint-disable-line\n\n if (typeof styleMap === 'string') {\n return $.getStyle(elements, styleMap);\n }\n\n if (!Array.isArray(elements)) {\n elements = [elements];\n }\n\n elements.map(element => {\n for (const prop in styleMap) {\n element.style[prop] = styleMap[prop];\n }\n });\n};\n\n$.removeStyle = (elements, styleProps) => {\n if (!Array.isArray(elements)) {\n elements = [elements];\n }\n\n if (!Array.isArray(styleProps)) {\n styleProps = [styleProps];\n }\n\n elements.map(element => {\n for (const prop of styleProps) {\n element.style[prop] = '';\n }\n });\n};\n\n$.getStyle = (element, prop) => {\n let val = getComputedStyle(element)[prop];\n\n if (['width', 'height'].includes(prop)) {\n val = parseFloat(val);\n }\n\n return val;\n};\n\n$.closest = (selector, element) => {\n if (!element) return null;\n\n if (element.matches(selector)) {\n return element;\n }\n\n return $.closest(selector, element.parentNode);\n};\n\n$.inViewport = (el, parentEl) => {\n const { top, left, bottom, right } = el.getBoundingClientRect();\n const { top: pTop, left: pLeft, bottom: pBottom, right: pRight } = parentEl.getBoundingClientRect();\n\n return top >= pTop && left >= pLeft && bottom <= pBottom && right <= pRight;\n};\n\n$.scrollTop = function scrollTop(element, pixels) {\n requestAnimationFrame(() => {\n element.scrollTop = pixels;\n });\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/dom.js","export function camelCaseToDash(str) {\n return str.replace(/([A-Z])/g, (g) => `-${g[0].toLowerCase()}`);\n}\n\nexport function 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\nexport function getDefault(a, b) {\n return a !== undefined ? a : b;\n}\n\nexport function escapeRegExp(str) {\n // https://stackoverflow.com/a/6969486\n return str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&');\n}\n\nexport function 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\nexport function getCSSRuleBlock(rule, styleMap) {\n return `${rule} { ${getCSSString(styleMap)} }`;\n}\n\nexport function 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 function removeCSSRule(rule, cssRulesString = '') {\n const rulePatternStr = `${escapeRegExp(rule)} {([^}]*)}`;\n const rulePattern = new RegExp(rulePatternStr, 'g');\n let output = cssRulesString;\n\n if (cssRulesString && cssRulesString.match(rulePattern)) {\n output = cssRulesString.replace(rulePattern, '');\n }\n\n return output.trim();\n}\n\nexport function copyTextToClipboard(text) {\n // https://stackoverflow.com/a/30810322/5353542\n var textArea = document.createElement('textarea');\n\n //\n // *** This styling is an extra step which is likely not required. ***\n //\n // Why is it here? To ensure:\n // 1. the element is able to have focus and selection.\n // 2. if element was to flash render it has minimal visual impact.\n // 3. less flakyness with selection and copying which **might** occur if\n // the textarea element is not visible.\n //\n // The likelihood is the element won't even render, not even a flash,\n // so some of these are just precautions. However in IE the element\n // is visible whilst the popup box asking the user for permission for\n // the web page to copy to the clipboard.\n //\n\n // Place in top-left corner of screen regardless of scroll position.\n textArea.style.position = 'fixed';\n textArea.style.top = 0;\n textArea.style.left = 0;\n\n // Ensure it has a small width and height. Setting to 1px / 1em\n // doesn't work as this gives a negative w/h on some browsers.\n textArea.style.width = '2em';\n textArea.style.height = '2em';\n\n // We don't need padding, reducing the size if it does flash render.\n textArea.style.padding = 0;\n\n // Clean up any borders.\n textArea.style.border = 'none';\n textArea.style.outline = 'none';\n textArea.style.boxShadow = 'none';\n\n // Avoid flash of white box if rendered for any reason.\n textArea.style.background = 'transparent';\n\n textArea.value = text;\n\n document.body.appendChild(textArea);\n\n textArea.select();\n\n try {\n document.execCommand('copy');\n } catch (err) {\n console.log('Oops, unable to copy');\n }\n\n document.body.removeChild(textArea);\n}\n\nexport function isNumeric(val) {\n return !isNaN(val);\n}\n\n// https://stackoverflow.com/a/27078401\nexport function throttle(func, wait, options) {\n var context, args, result;\n var timeout = null;\n var previous = 0;\n if (!options) options = {};\n\n let later = function () {\n previous = options.leading === false ? 0 : Date.now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n };\n\n return function () {\n var now = Date.now();\n if (!previous && options.leading === false) previous = now;\n let remaining = wait - (now - previous);\n context = this;\n args = arguments;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = now;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n};\n\nexport function promisify(fn, context = null) {\n return (...args) => {\n return new Promise(resolve => {\n setTimeout(() => {\n fn.apply(context, args);\n resolve('done', fn.name);\n }, 0);\n });\n };\n};\n\nexport function chainPromises(promises) {\n return promises.reduce(\n (prev, cur) => prev.then(cur), Promise.resolve()\n );\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils.js","import $ from './dom';\nimport { makeDataAttributeString, promisify } from './utils';\nimport { getCellHTML } from './cellmanager';\n\nexport default class RowManager {\n constructor(instance) {\n this.instance = instance;\n this.options = this.instance.options;\n this.wrapper = this.instance.wrapper;\n this.bodyScrollable = this.instance.bodyScrollable;\n\n this.bindEvents();\n this.refreshRows = promisify(this.refreshRows, this);\n }\n\n get datamanager() {\n return this.instance.datamanager;\n }\n\n get cellmanager() {\n return this.instance.cellmanager;\n }\n\n bindEvents() {\n this.bindCheckbox();\n }\n\n bindCheckbox() {\n if (!this.options.addCheckboxColumn) return;\n\n // map of checked rows\n this.checkMap = [];\n\n $.on(this.wrapper, 'click', '.data-table-col[data-col-index=\"0\"] [type=\"checkbox\"]', (e, $checkbox) => {\n const $cell = $checkbox.closest('.data-table-col');\n const { rowIndex, isHeader } = $.data($cell);\n const checked = $checkbox.checked;\n\n if (isHeader) {\n this.checkAll(checked);\n } else {\n this.checkRow(rowIndex, checked);\n }\n });\n }\n\n refreshRows() {\n this.instance.renderBody();\n this.instance.setDimensions();\n }\n\n refreshRow(row, rowIndex) {\n const _row = this.datamanager.updateRow(row, rowIndex);\n\n _row.forEach(cell => {\n this.cellmanager.refreshCell(cell);\n });\n }\n\n getCheckedRows() {\n if (!this.checkMap) {\n return [];\n }\n\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 $.each(`.data-table-col[data-row-index=\"${rowIndex}\"][data-col-index=\"0\"] [type=\"checkbox\"]`, this.bodyScrollable)\n .map(input => {\n input.checked = toggle;\n });\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 $.each('.data-table-col[data-col-index=\"0\"] [type=\"checkbox\"]', this.bodyScrollable)\n .map(input => {\n input.checked = toggle;\n });\n // highlight all\n this.highlightAll(toggle);\n }\n\n highlightRow(rowIndex, toggle = true) {\n const $row = this.getRow$(rowIndex);\n if (!$row) return;\n\n if (!toggle && this.bodyScrollable.classList.contains('row-highlight-all')) {\n $row.classList.add('row-unhighlight');\n return;\n }\n\n if (toggle && $row.classList.contains('row-unhighlight')) {\n $row.classList.remove('row-unhighlight');\n }\n\n this._highlightedRows = this._highlightedRows || {};\n\n if (toggle) {\n $row.classList.add('row-highlight');\n this._highlightedRows[rowIndex] = $row;\n } else {\n $row.classList.remove('row-highlight');\n delete this._highlightedRows[rowIndex];\n }\n }\n\n highlightAll(toggle = true) {\n if (toggle) {\n this.bodyScrollable.classList.add('row-highlight-all');\n } else {\n this.bodyScrollable.classList.remove('row-highlight-all');\n for (const rowIndex in this._highlightedRows) {\n const $row = this._highlightedRows[rowIndex];\n $row.classList.remove('row-highlight');\n }\n this._highlightedRows = {};\n }\n }\n\n getRow$(rowIndex) {\n return $(`.data-table-row[data-row-index=\"${rowIndex}\"]`, this.bodyScrollable);\n }\n\n getTotalRows() {\n return this.datamanager.getRowCount();\n }\n\n getFirstRowIndex() {\n return 0;\n }\n\n getLastRowIndex() {\n return this.datamanager.getRowCount() - 1;\n }\n\n scrollToRow(rowIndex) {\n rowIndex = +rowIndex;\n this._lastScrollTo = this._lastScrollTo || 0;\n const $row = this.getRow$(rowIndex);\n if ($.inViewport($row, this.bodyScrollable)) return;\n\n const { height } = $row.getBoundingClientRect();\n const { top, bottom } = this.bodyScrollable.getBoundingClientRect();\n const rowsInView = Math.floor((bottom - top) / height);\n\n let offset = 0;\n if (rowIndex > this._lastScrollTo) {\n offset = height * ((rowIndex + 1) - rowsInView);\n } else {\n offset = height * ((rowIndex + 1) - 1);\n }\n\n this._lastScrollTo = rowIndex;\n $.scrollTop(this.bodyScrollable, offset);\n }\n}\n\nexport function getRowHTML(row, props) {\n const dataAttr = makeDataAttributeString(props);\n\n return `\n \n ${row.map(getCellHTML).join('')}\n
\n `;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/rowmanager.js","import {\n copyTextToClipboard,\n makeDataAttributeString,\n throttle\n} from './utils';\nimport keyboard from './keyboard';\nimport $ from './dom';\nimport { getDropdownHTML } from './columnmanager';\n\nexport default class CellManager {\n constructor(instance) {\n this.instance = instance;\n this.wrapper = this.instance.wrapper;\n this.options = this.instance.options;\n this.style = this.instance.style;\n this.bodyScrollable = this.instance.bodyScrollable;\n this.columnmanager = this.instance.columnmanager;\n this.rowmanager = this.instance.rowmanager;\n this.datamanager = this.instance.datamanager;\n\n this.bindEvents();\n }\n\n bindEvents() {\n this.bindFocusCell();\n this.bindEditCell();\n this.bindKeyboardSelection();\n this.bindCopyCellContents();\n this.bindMouseEvents();\n }\n\n bindFocusCell() {\n this.bindKeyboardNav();\n }\n\n bindEditCell() {\n this.$editingCell = null;\n\n $.on(this.bodyScrollable, 'dblclick', '.data-table-col', (e, cell) => {\n this.activateEditing(cell);\n });\n\n keyboard.on('enter', (e) => {\n if (this.$focusedCell && !this.$editingCell) {\n // enter keypress on focused cell\n this.activateEditing(this.$focusedCell);\n } else if (this.$editingCell) {\n // enter keypress on editing cell\n this.submitEditing();\n this.deactivateEditing();\n }\n });\n }\n\n bindKeyboardNav() {\n const focusCell = (direction) => {\n console.log(direction);\n if (!this.$focusedCell || this.$editingCell) {\n return false;\n }\n\n let $cell = this.$focusedCell;\n\n if (direction === 'left') {\n $cell = this.getLeftCell$($cell);\n } else if (direction === 'right' || direction === 'tab') {\n $cell = this.getRightCell$($cell);\n } else if (direction === 'up') {\n $cell = this.getAboveCell$($cell);\n } else if (direction === 'down') {\n $cell = this.getBelowCell$($cell);\n }\n\n this.focusCell($cell);\n return true;\n };\n\n const focusLastCell = (direction) => {\n if (!this.$focusedCell || this.$editingCell) {\n return false;\n }\n\n let $cell = this.$focusedCell;\n const { rowIndex, colIndex } = $.data($cell);\n\n if (direction === 'left') {\n $cell = this.getLeftMostCell$(rowIndex);\n } else if (direction === 'right') {\n $cell = this.getRightMostCell$(rowIndex);\n } else if (direction === 'up') {\n $cell = this.getTopMostCell$(colIndex);\n } else if (direction === 'down') {\n $cell = this.getBottomMostCell$(colIndex);\n }\n\n this.focusCell($cell);\n return true;\n };\n\n ['left', 'right', 'up', 'down', 'tab'].map(\n direction => keyboard.on(direction, () => focusCell(direction))\n );\n\n ['left', 'right', 'up', 'down'].map(\n direction => keyboard.on('ctrl+' + direction, () => focusLastCell(direction))\n );\n\n keyboard.on('esc', () => {\n this.deactivateEditing();\n });\n }\n\n bindKeyboardSelection() {\n const getNextSelectionCursor = (direction) => {\n let $selectionCursor = this.getSelectionCursor();\n\n if (direction === 'left') {\n $selectionCursor = this.getLeftCell$($selectionCursor);\n } else if (direction === 'right') {\n $selectionCursor = this.getRightCell$($selectionCursor);\n } else if (direction === 'up') {\n $selectionCursor = this.getAboveCell$($selectionCursor);\n } else if (direction === 'down') {\n $selectionCursor = this.getBelowCell$($selectionCursor);\n }\n\n return $selectionCursor;\n };\n\n ['left', 'right', 'up', 'down'].map(\n direction => keyboard.on('shift+' + direction,\n () => this.selectArea(getNextSelectionCursor(direction)))\n );\n }\n\n bindCopyCellContents() {\n keyboard.on('ctrl+c', () => {\n this.copyCellContents(this.$focusedCell, this.$selectionCursor);\n });\n }\n\n bindMouseEvents() {\n let mouseDown = null;\n\n $.on(this.bodyScrollable, 'mousedown', '.data-table-col', (e) => {\n mouseDown = true;\n this.focusCell($(e.delegatedTarget));\n });\n\n $.on(this.bodyScrollable, 'mouseup', () => {\n mouseDown = false;\n });\n\n const selectArea = (e) => {\n if (!mouseDown) return;\n this.selectArea($(e.delegatedTarget));\n };\n\n $.on(this.bodyScrollable, 'mousemove', '.data-table-col', throttle(selectArea, 50));\n }\n\n focusCell($cell, { skipClearSelection = 0 } = {}) {\n if (!$cell) return;\n\n // don't focus if already editing cell\n if ($cell === this.$editingCell) return;\n\n const { colIndex, isHeader } = $.data($cell);\n if (isHeader) {\n return;\n }\n\n const column = this.columnmanager.getColumn(colIndex);\n if (column.focusable === false) {\n return;\n }\n\n this.deactivateEditing();\n if (!skipClearSelection) {\n this.clearSelection();\n }\n\n if (this.$focusedCell) {\n this.$focusedCell.classList.remove('selected');\n }\n\n this.$focusedCell = $cell;\n $cell.classList.add('selected');\n\n this.highlightRowColumnHeader($cell);\n this.scrollToCell($cell);\n }\n\n highlightRowColumnHeader($cell) {\n const { colIndex, rowIndex } = $.data($cell);\n const _colIndex = this.datamanager.getColumnIndexById('_rowIndex');\n const colHeaderSelector = `.data-table-header .data-table-col[data-col-index=\"${colIndex}\"]`;\n const rowHeaderSelector = `.data-table-col[data-row-index=\"${rowIndex}\"][data-col-index=\"${_colIndex}\"]`;\n\n if (this.lastHeaders) {\n $.removeStyle(this.lastHeaders, 'backgroundColor');\n }\n\n const colHeader = $(colHeaderSelector, this.wrapper);\n const rowHeader = $(rowHeaderSelector, this.wrapper);\n\n $.style([colHeader, rowHeader], {\n backgroundColor: '#f5f7fa' // light-bg\n });\n\n this.lastHeaders = [colHeader, rowHeader];\n }\n\n selectAreaOnClusterChanged() {\n if (!(this.$focusedCell && this.$selectionCursor)) return;\n const { colIndex, rowIndex } = $.data(this.$selectionCursor);\n const $cell = this.getCell$(colIndex, rowIndex);\n\n if (!$cell || $cell === this.$selectionCursor) return;\n\n // selectArea needs $focusedCell\n const fCell = $.data(this.$focusedCell);\n this.$focusedCell = this.getCell$(fCell.colIndex, fCell.rowIndex);\n\n this.selectArea($cell);\n }\n\n focusCellOnClusterChanged() {\n if (!this.$focusedCell) return;\n\n const { colIndex, rowIndex } = $.data(this.$focusedCell);\n const $cell = this.getCell$(colIndex, rowIndex);\n\n if (!$cell) return;\n // this function is called after selectAreaOnClusterChanged,\n // focusCell calls clearSelection which resets the area selection\n // so a flag to skip it\n this.focusCell($cell, { skipClearSelection: 1 });\n }\n\n selectArea($selectionCursor) {\n if (!this.$focusedCell) return;\n\n if (this._selectArea(this.$focusedCell, $selectionCursor)) {\n // valid selection\n this.$selectionCursor = $selectionCursor;\n }\n };\n\n _selectArea($cell1, $cell2) {\n if ($cell1 === $cell2) return false;\n\n const cells = this.getCellsInRange($cell1, $cell2);\n if (!cells) return false;\n\n this.clearSelection();\n cells.map(index => this.getCell$(...index)).map($cell => $cell.classList.add('highlight'));\n return true;\n }\n\n getCellsInRange($cell1, $cell2) {\n let colIndex1, rowIndex1, colIndex2, rowIndex2;\n\n if (typeof $cell1 === 'number') {\n [colIndex1, rowIndex1, colIndex2, rowIndex2] = arguments;\n } else\n if (typeof $cell1 === 'object') {\n\n if (!($cell1 && $cell2)) {\n return false;\n }\n\n const cell1 = $.data($cell1);\n const cell2 = $.data($cell2);\n\n colIndex1 = cell1.colIndex;\n rowIndex1 = cell1.rowIndex;\n colIndex2 = cell2.colIndex;\n rowIndex2 = cell2.rowIndex;\n }\n\n if (rowIndex1 > rowIndex2) {\n [rowIndex1, rowIndex2] = [rowIndex2, rowIndex1];\n }\n\n if (colIndex1 > colIndex2) {\n [colIndex1, colIndex2] = [colIndex2, colIndex1];\n }\n\n if (this.isStandardCell(colIndex1) || this.isStandardCell(colIndex2)) {\n return false;\n }\n\n let cells = [];\n let colIndex = colIndex1;\n let rowIndex = rowIndex1;\n let rowIndices = [];\n\n while (rowIndex <= rowIndex2) {\n rowIndices.push(rowIndex);\n rowIndex++;\n }\n\n rowIndices.map(rowIndex => {\n while (colIndex <= colIndex2) {\n cells.push([colIndex, rowIndex]);\n colIndex++;\n }\n colIndex = colIndex1;\n });\n\n return cells;\n }\n\n clearSelection() {\n $.each('.data-table-col.highlight', this.bodyScrollable)\n .map(cell => cell.classList.remove('highlight'));\n\n this.$selectionCursor = null;\n }\n\n getSelectionCursor() {\n return this.$selectionCursor || this.$focusedCell;\n }\n\n activateEditing($cell) {\n const { rowIndex, colIndex } = $.data($cell);\n\n const col = this.columnmanager.getColumn(colIndex);\n if (col && (col.editable === false || col.focusable === false)) {\n return;\n }\n\n const cell = this.getCell(colIndex, rowIndex);\n if (cell && cell.editable === false) {\n return;\n }\n\n if (this.$editingCell) {\n const { _rowIndex, _colIndex } = $.data(this.$editingCell);\n\n if (rowIndex === _rowIndex && colIndex === _colIndex) {\n // editing the same cell\n return;\n }\n }\n\n this.$editingCell = $cell;\n $cell.classList.add('editing');\n\n const $editCell = $('.edit-cell', $cell);\n $editCell.innerHTML = '';\n\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, rowIndex, col);\n }\n }\n\n deactivateEditing() {\n // keep focus on the cell so that keyboard navigation works\n if (this.$focusedCell) this.$focusedCell.focus();\n\n if (!this.$editingCell) return;\n this.$editingCell.classList.remove('editing');\n this.$editingCell = null;\n }\n\n getEditingObject(colIndex, rowIndex, value, parent) {\n // debugger;\n const obj = this.options.editing(colIndex, rowIndex, value, parent);\n if (obj && obj.setValue) return obj;\n\n // editing fallback\n const $input = $.create('input', {\n type: 'text',\n inside: parent\n });\n\n return {\n initValue(value) {\n $input.focus();\n $input.value = value;\n },\n getValue() {\n return $input.value;\n },\n setValue(value) {\n $input.value = value;\n }\n };\n }\n\n submitEditing() {\n if (!this.$editingCell) return;\n const $cell = this.$editingCell;\n const { rowIndex, colIndex } = $.data($cell);\n const col = this.datamanager.getColumn(colIndex);\n\n if ($cell) {\n const editing = this.currentCellEditing;\n\n if (editing) {\n const value = editing.getValue();\n const done = editing.setValue(value, rowIndex, col);\n const oldValue = this.getCell(colIndex, rowIndex).content;\n\n // update cell immediately\n this.updateCell(colIndex, rowIndex, value);\n $cell.focus();\n\n if (done && done.then) {\n // revert to oldValue if promise fails\n done.catch((e) => {\n console.log(e);\n this.updateCell(colIndex, rowIndex, oldValue);\n });\n }\n }\n }\n\n this.currentCellEditing = null;\n }\n\n copyCellContents($cell1, $cell2) {\n if (!$cell2 && $cell1) {\n // copy only focusedCell\n const { colIndex, rowIndex } = $.data($cell1);\n const cell = this.getCell(colIndex, rowIndex);\n copyTextToClipboard(cell.content);\n return;\n }\n const cells = this.getCellsInRange($cell1, $cell2);\n\n if (!cells) return;\n\n const values = cells\n // get cell objects\n .map(index => this.getCell(...index))\n // convert to array of rows\n .reduce((acc, curr) => {\n const rowIndex = curr.rowIndex;\n\n acc[rowIndex] = acc[rowIndex] || [];\n acc[rowIndex].push(curr.content);\n\n return acc;\n }, [])\n // join values by tab\n .map(row => row.join('\\t'))\n // join rows by newline\n .join('\\n');\n\n copyTextToClipboard(values);\n }\n\n updateCell(colIndex, rowIndex, value) {\n const cell = this.datamanager.updateCell(colIndex, rowIndex, {\n content: value\n });\n this.refreshCell(cell);\n }\n\n refreshCell(cell) {\n const $cell = $(cellSelector(cell.colIndex, cell.rowIndex), this.bodyScrollable);\n $cell.innerHTML = getCellContent(cell);\n }\n\n isStandardCell(colIndex) {\n // Standard cells are in Sr. No and Checkbox column\n return colIndex < this.columnmanager.getFirstColumnIndex();\n }\n\n getCell$(colIndex, rowIndex) {\n return $(cellSelector(colIndex, rowIndex), this.bodyScrollable);\n }\n\n getAboveCell$($cell) {\n const { colIndex } = $.data($cell);\n const $aboveRow = $cell.parentElement.previousElementSibling;\n\n return $(`[data-col-index=\"${colIndex}\"]`, $aboveRow);\n }\n\n getBelowCell$($cell) {\n const { colIndex } = $.data($cell);\n const $belowRow = $cell.parentElement.nextElementSibling;\n\n return $(`[data-col-index=\"${colIndex}\"]`, $belowRow);\n }\n\n getLeftCell$($cell) {\n return $cell.previousElementSibling;\n }\n\n getRightCell$($cell) {\n return $cell.nextElementSibling;\n }\n\n getLeftMostCell$(rowIndex) {\n return this.getCell$(this.columnmanager.getFirstColumnIndex(), rowIndex);\n }\n\n getRightMostCell$(rowIndex) {\n return this.getCell$(this.columnmanager.getLastColumnIndex(), rowIndex);\n }\n\n getTopMostCell$(colIndex) {\n return this.getCell$(colIndex, this.rowmanager.getFirstRowIndex());\n }\n\n getBottomMostCell$(colIndex) {\n return this.getCell$(colIndex, this.rowmanager.getLastRowIndex());\n }\n\n getCell(colIndex, rowIndex) {\n return this.instance.datamanager.getCell(colIndex, rowIndex);\n }\n\n getCellAttr($cell) {\n return this.instance.getCellAttr($cell);\n }\n\n getRowHeight() {\n return $.style($('.data-table-row', this.bodyScrollable), 'height');\n }\n\n scrollToCell($cell) {\n if ($.inViewport($cell, this.bodyScrollable)) return false;\n\n const { rowIndex } = $.data($cell);\n this.rowmanager.scrollToRow(rowIndex);\n return false;\n }\n\n getRowCountPerPage() {\n return Math.ceil(this.instance.getViewportHeight() / this.getRowHeight());\n }\n}\n\nexport function getCellHTML(cell) {\n const { rowIndex, colIndex, isHeader } = cell;\n const dataAttr = makeDataAttributeString({\n rowIndex,\n colIndex,\n isHeader\n });\n\n return `\n \n ${getCellContent(cell)}\n | \n `;\n}\n\nexport function getCellContent(cell) {\n const { isHeader } = cell;\n\n const editable = !isHeader && cell.editable !== false;\n const editCellHTML = editable ? getEditCellHTML() : '';\n\n const sortable = isHeader && cell.sortable !== false;\n const sortIndicator = sortable ? '' : '';\n\n const resizable = isHeader && cell.resizable !== false;\n const resizeColumn = resizable ? '' : '';\n\n const hasDropdown = isHeader && cell.dropdown !== false;\n const dropdown = hasDropdown ? `${getDropdownHTML()}
` : '';\n\n const contentHTML = (!cell.isHeader && cell.column.format) ? cell.column.format(cell.content) : cell.content;\n\n return `\n \n ${(contentHTML)}\n ${sortIndicator}\n ${resizeColumn}\n ${dropdown}\n
\n ${editCellHTML}\n `;\n}\n\nexport function getEditCellHTML() {\n return `\n \n `;\n}\n\nfunction cellSelector(colIndex, rowIndex) {\n return `.data-table-col[data-col-index=\"${colIndex}\"][data-row-index=\"${rowIndex}\"]`;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/cellmanager.js","import $ from './dom';\n\nconst KEYCODES = {\n 13: 'enter',\n 91: 'meta',\n 16: 'shift',\n 17: 'ctrl',\n 18: 'alt',\n 37: 'left',\n 38: 'up',\n 39: 'right',\n 40: 'down',\n 9: 'tab',\n 27: 'esc',\n 67: 'c'\n};\n\nlet initDone = false;\nconst handlers = {};\n\nfunction bind(dom) {\n if (initDone) return;\n $.on(dom, 'keydown', handler);\n initDone = true;\n}\n\nfunction handler(e) {\n let key = KEYCODES[e.keyCode];\n\n if (e.shiftKey && key !== 'shift') {\n key = 'shift+' + key;\n }\n\n if ((e.ctrlKey && key !== 'ctrl') || (e.metaKey && key !== 'meta')) {\n key = 'ctrl+' + key;\n }\n\n const _handlers = handlers[key];\n\n if (_handlers && _handlers.length > 0) {\n _handlers.map(handler => {\n const preventBubbling = handler();\n\n if (preventBubbling === undefined || preventBubbling === true) {\n e.preventDefault();\n }\n });\n }\n}\n\nexport default {\n init(dom) {\n bind(dom);\n },\n on(key, handler) {\n const keys = key.split(',').map(k => k.trim());\n\n keys.map(key => {\n handlers[key] = handlers[key] || [];\n handlers[key].push(handler);\n });\n }\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/keyboard.js","import $ from './dom';\nimport Sortable from 'sortablejs';\nimport { getRowHTML } from './rowmanager';\nimport { getDefault } from './utils';\n\nexport default class ColumnManager {\n constructor(instance) {\n this.instance = instance;\n this.options = this.instance.options;\n this.fireEvent = this.instance.fireEvent;\n this.header = this.instance.header;\n this.datamanager = this.instance.datamanager;\n this.style = this.instance.style;\n this.wrapper = this.instance.wrapper;\n this.rowmanager = this.instance.rowmanager;\n\n this.bindEvents();\n getDropdownHTML = getDropdownHTML.bind(this, this.options.dropdownButton);\n }\n\n renderHeader() {\n this.header.innerHTML = '';\n this.refreshHeader();\n }\n\n refreshHeader() {\n const columns = this.datamanager.getColumns();\n\n if (!$('.data-table-col', this.header)) {\n // insert html\n $('thead', this.header).innerHTML = getRowHTML(columns, { isHeader: 1 });\n } else {\n // refresh dom state\n const $cols = $.each('.data-table-col', this.header);\n if (columns.length < $cols.length) {\n // deleted column\n $('thead', this.header).innerHTML = getRowHTML(columns, { isHeader: 1 });\n return;\n }\n\n $cols.map(($col, i) => {\n const column = columns[i];\n // column sorted or order changed\n // update colIndex of each header cell\n $.data($col, {\n colIndex: column.colIndex\n });\n\n // refresh sort indicator\n const sortIndicator = $('.sort-indicator', $col);\n if (sortIndicator) {\n sortIndicator.innerHTML = this.options.sortIndicator[column.sortOrder];\n }\n });\n }\n // reset columnMap\n this.$columnMap = [];\n }\n\n bindEvents() {\n this.bindDropdown();\n this.bindResizeColumn();\n this.bindMoveColumn();\n }\n\n bindDropdown() {\n let $activeDropdown;\n $.on(this.header, 'click', '.data-table-dropdown-toggle', (e, $button) => {\n const $dropdown = $.closest('.data-table-dropdown', $button);\n\n if (!$dropdown.classList.contains('is-active')) {\n deactivateDropdown();\n $dropdown.classList.add('is-active');\n $activeDropdown = $dropdown;\n } else {\n deactivateDropdown();\n }\n });\n\n $.on(document.body, 'click', (e) => {\n if (e.target.matches('.data-table-dropdown-toggle')) return;\n deactivateDropdown();\n });\n\n const dropdownItems = this.options.headerDropdown;\n\n $.on(this.header, 'click', '.data-table-dropdown-list > div', (e, $item) => {\n const $col = $.closest('.data-table-col', $item);\n const { index } = $.data($item);\n const { colIndex } = $.data($col);\n let callback = dropdownItems[index].action;\n\n callback && callback.call(this.instance, this.getColumn(colIndex));\n });\n\n function deactivateDropdown(e) {\n $activeDropdown && $activeDropdown.classList.remove('is-active');\n $activeDropdown = null;\n }\n }\n\n bindResizeColumn() {\n let isDragging = false;\n let $resizingCell, startWidth, startX;\n\n $.on(this.header, 'mousedown', '.data-table-col .column-resizer', (e, $handle) => {\n document.body.classList.add('data-table-resize');\n const $cell = $handle.parentNode.parentNode;\n $resizingCell = $cell;\n const { colIndex } = $.data($resizingCell);\n const col = this.getColumn(colIndex);\n\n if (col && col.resizable === false) {\n return;\n }\n\n isDragging = true;\n startWidth = $.style($('.content', $resizingCell), 'width');\n startX = e.pageX;\n });\n\n $.on(document.body, 'mouseup', (e) => {\n document.body.classList.remove('data-table-resize');\n if (!$resizingCell) return;\n isDragging = false;\n\n const { colIndex } = $.data($resizingCell);\n this.setColumnWidth(colIndex);\n this.instance.setBodyWidth();\n $resizingCell = null;\n });\n\n $.on(document.body, 'mousemove', (e) => {\n if (!isDragging) return;\n const finalWidth = startWidth + (e.pageX - startX);\n const { colIndex } = $.data($resizingCell);\n\n if (this.getColumnMinWidth(colIndex) > finalWidth) {\n // don't resize past minWidth\n return;\n }\n this.datamanager.updateColumn(colIndex, { width: finalWidth });\n this.setColumnHeaderWidth(colIndex);\n });\n }\n\n bindMoveColumn() {\n let initialized;\n\n const initialize = () => {\n if (initialized) {\n $.off(document.body, 'mousemove', initialize);\n return;\n }\n const ready = $('.data-table-col', this.header);\n if (!ready) return;\n\n const $parent = $('.data-table-row', this.header);\n\n this.sortable = Sortable.create($parent, {\n onEnd: (e) => {\n const { oldIndex, newIndex } = e;\n const $draggedCell = e.item;\n const { colIndex } = $.data($draggedCell);\n if (+colIndex === newIndex) return;\n\n this.switchColumn(oldIndex, newIndex);\n },\n preventOnFilter: false,\n filter: '.column-resizer, .data-table-dropdown',\n animation: 150\n });\n };\n\n $.on(document.body, 'mousemove', initialize);\n }\n\n bindSortColumn() {\n\n $.on(this.header, 'click', '.data-table-col .column-title', (e, span) => {\n const $cell = span.closest('.data-table-col');\n let { colIndex, sortOrder } = $.data($cell);\n sortOrder = getDefault(sortOrder, 'none');\n const col = this.getColumn(colIndex);\n\n if (col && col.sortable === false) {\n return;\n }\n\n // reset sort indicator\n $('.sort-indicator', this.header).textContent = '';\n $.each('.data-table-col', this.header).map($cell => {\n $.data($cell, {\n sortOrder: 'none'\n });\n });\n\n let nextSortOrder, textContent;\n if (sortOrder === 'none') {\n nextSortOrder = 'asc';\n textContent = '▲';\n } else if (sortOrder === 'asc') {\n nextSortOrder = 'desc';\n textContent = '▼';\n } else if (sortOrder === 'desc') {\n nextSortOrder = 'none';\n textContent = '';\n }\n\n $.data($cell, {\n sortOrder: nextSortOrder\n });\n $('.sort-indicator', $cell).textContent = textContent;\n\n this.sortColumn(colIndex, nextSortOrder);\n });\n }\n\n sortColumn(colIndex, nextSortOrder) {\n this.instance.freeze();\n this.sortRows(colIndex, nextSortOrder)\n .then(() => {\n this.refreshHeader();\n return this.rowmanager.refreshRows();\n })\n .then(() => this.instance.unfreeze())\n .then(() => {\n this.fireEvent('onSortColumn', this.getColumn(colIndex));\n });\n }\n\n removeColumn(colIndex) {\n const removedCol = this.getColumn(colIndex);\n this.instance.freeze();\n this.datamanager.removeColumn(colIndex)\n .then(() => {\n this.refreshHeader();\n return this.rowmanager.refreshRows();\n })\n .then(() => this.instance.unfreeze())\n .then(() => {\n this.fireEvent('onRemoveColumn', removedCol);\n });\n }\n\n switchColumn(oldIndex, newIndex) {\n this.instance.freeze();\n this.datamanager.switchColumn(oldIndex, newIndex)\n .then(() => {\n this.refreshHeader();\n return this.rowmanager.refreshRows();\n })\n .then(() => {\n this.setColumnWidth(oldIndex);\n this.setColumnWidth(newIndex);\n this.instance.unfreeze();\n })\n .then(() => {\n this.fireEvent('onSwitchColumn',\n this.getColumn(oldIndex), this.getColumn(newIndex)\n );\n });\n }\n\n setDimensions() {\n this.setHeaderStyle();\n this.setupMinWidth();\n this.setupNaturalColumnWidth();\n this.distributeRemainingWidth();\n this.setColumnStyle();\n this.setDefaultCellHeight();\n }\n\n setHeaderStyle() {\n if (!this.options.takeAvailableSpace) {\n // setting width as 0 will ensure that the\n // header doesn't take the available space\n $.style(this.header, {\n width: 0\n });\n }\n\n $.style(this.header, {\n margin: 0\n });\n\n // don't show resize cursor on nonResizable columns\n const nonResizableColumnsSelector = this.datamanager.getColumns()\n .filter(col => col.resizable === false)\n .map(col => col.colIndex)\n .map(i => `.data-table-header [data-col-index=\"${i}\"]`)\n .join();\n\n this.style.setStyle(nonResizableColumnsSelector, {\n cursor: 'pointer'\n });\n }\n\n setupMinWidth() {\n $.each('.data-table-col', this.header).map(col => {\n const width = $.style($('.content', col), 'width');\n const { colIndex } = $.data(col);\n const column = this.getColumn(colIndex);\n\n if (!column.minWidth) {\n // only set this once\n this.datamanager.updateColumn(colIndex, { minWidth: width });\n }\n });\n }\n\n setupNaturalColumnWidth() {\n // set initial width as naturally calculated by table's first row\n $.each('.data-table-row[data-row-index=\"0\"] .data-table-col', this.bodyScrollable).map($cell => {\n\n const { colIndex } = $.data($cell);\n if (this.getColumn(colIndex).width > 0) {\n // already set\n return;\n }\n\n let width = $.style($('.content', $cell), 'width');\n const minWidth = this.getColumnMinWidth(colIndex);\n\n if (width < minWidth) {\n width = minWidth;\n }\n this.datamanager.updateColumn(colIndex, { width });\n });\n }\n\n distributeRemainingWidth() {\n if (!this.options.takeAvailableSpace) return;\n\n const wrapperWidth = $.style(this.instance.datatableWrapper, 'width');\n const headerWidth = $.style(this.header, 'width');\n\n if (headerWidth >= wrapperWidth) {\n // don't resize, horizontal scroll takes place\n return;\n }\n\n const resizableColumns = this.datamanager.getColumns().filter(\n col => col.resizable === undefined || col.resizable\n );\n\n const deltaWidth = (wrapperWidth - headerWidth) / resizableColumns.length;\n\n resizableColumns.map(col => {\n const width = $.style(this.getColumnHeaderElement(col.colIndex), 'width');\n let finalWidth = Math.min(width + deltaWidth) - 2;\n\n this.datamanager.updateColumn(col.colIndex, { width: finalWidth });\n });\n }\n\n setDefaultCellHeight() {\n if (this.__cellHeightSet) return;\n const height = $.style($('.data-table-col', this.instance.datatableWrapper), 'height');\n if (height) {\n this.setCellHeight(height);\n this.__cellHeightSet = true;\n }\n }\n\n setCellHeight(height) {\n this.style.setStyle('.data-table-col .content', {\n height: height + 'px'\n });\n this.style.setStyle('.data-table-col .edit-cell', {\n height: height + 'px'\n });\n }\n\n setColumnStyle() {\n // align columns\n this.getColumns()\n .map(column => {\n // alignment\n if (['left', 'center', 'right'].includes(column.align)) {\n this.style.setStyle(`[data-col-index=\"${column.colIndex}\"]`, {\n 'text-align': column.align\n });\n }\n // width\n this.setColumnHeaderWidth(column.colIndex);\n this.setColumnWidth(column.colIndex);\n });\n this.instance.setBodyWidth();\n\n }\n\n sortRows(colIndex, sortOrder) {\n return this.datamanager.sortRows(colIndex, sortOrder);\n }\n\n getColumn(colIndex) {\n return this.datamanager.getColumn(colIndex);\n }\n\n getColumns() {\n return this.datamanager.getColumns();\n }\n\n setColumnWidth(colIndex) {\n colIndex = +colIndex;\n this._columnWidthMap = this._columnWidthMap || [];\n\n const { width } = this.getColumn(colIndex);\n\n let index = this._columnWidthMap[colIndex];\n const selector = `[data-col-index=\"${colIndex}\"] .content, [data-col-index=\"${colIndex}\"] .edit-cell`;\n const styles = {\n width: width + 'px'\n };\n\n index = this.style.setStyle(selector, styles, index);\n this._columnWidthMap[colIndex] = index;\n }\n\n setColumnHeaderWidth(colIndex) {\n colIndex = +colIndex;\n this.$columnMap = this.$columnMap || [];\n const selector = `[data-col-index=\"${colIndex}\"][data-is-header] .content`;\n const { width } = this.getColumn(colIndex);\n\n let $column = this.$columnMap[colIndex];\n if (!$column) {\n $column = this.header.querySelector(selector);\n this.$columnMap[colIndex] = $column;\n }\n\n $column.style.width = width + 'px';\n }\n\n getColumnMinWidth(colIndex) {\n colIndex = +colIndex;\n return this.getColumn(colIndex).minWidth || 24;\n }\n\n getFirstColumnIndex() {\n if (this.options.addCheckboxColumn && this.options.addSerialNoColumn) {\n return 2;\n }\n\n if (this.options.addCheckboxColumn || this.options.addSerialNoColumn) {\n return 1;\n }\n\n return 0;\n }\n\n getHeaderCell$(colIndex) {\n return $(`.data-table-col[data-col-index=\"${colIndex}\"]`, this.header);\n }\n\n getLastColumnIndex() {\n return this.datamanager.getColumnCount() - 1;\n }\n\n getColumnHeaderElement(colIndex) {\n colIndex = +colIndex;\n if (colIndex < 0) return null;\n return $(`.data-table-col[data-is-header][data-col-index=\"${colIndex}\"]`, this.wrapper);\n }\n\n getSerialColumnIndex() {\n const columns = this.datamanager.getColumns();\n\n return columns.findIndex(column => column.content.includes('Sr. No'));\n }\n}\n\n// eslint-disable-next-line\nvar getDropdownHTML = function getDropdownHTML(dropdownButton = 'v') {\n // add dropdown buttons\n const dropdownItems = this.options.headerDropdown;\n\n return `${dropdownButton}
\n \n ${dropdownItems.map((d, i) => `
${d.label}
`).join('')}\n
\n `;\n};\n\nexport {\n getDropdownHTML\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/columnmanager.js","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","import $ from './dom';\nimport DataManager from './datamanager';\nimport CellManager from './cellmanager';\nimport ColumnManager from './columnmanager';\nimport RowManager from './rowmanager';\nimport BodyRenderer from './body-renderer';\nimport Style from './style';\nimport keyboard from './keyboard';\nimport DEFAULT_OPTIONS from './defaults';\nimport './style.scss';\n\nclass DataTable {\n constructor(wrapper, options) {\n DataTable.instances++;\n\n if (typeof wrapper === 'string') {\n // css selector\n wrapper = document.querySelector(wrapper);\n }\n this.wrapper = wrapper;\n if (!(this.wrapper instanceof HTMLElement)) {\n throw new Error('Invalid argument given for `wrapper`');\n }\n\n this.options = Object.assign({}, DEFAULT_OPTIONS, options);\n this.options.headerDropdown =\n DEFAULT_OPTIONS.headerDropdown\n .concat(options.headerDropdown || []);\n // custom user events\n this.events = Object.assign(\n {}, DEFAULT_OPTIONS.events, options.events || {}\n );\n this.fireEvent = this.fireEvent.bind(this);\n\n this.prepare();\n\n this.style = new Style(this);\n this.datamanager = new DataManager(this.options);\n this.rowmanager = new RowManager(this);\n this.columnmanager = new ColumnManager(this);\n this.cellmanager = new CellManager(this);\n this.bodyRenderer = new BodyRenderer(this);\n\n keyboard.init(this.wrapper);\n\n if (this.options.data) {\n this.refresh();\n }\n }\n\n prepare() {\n this.prepareDom();\n this.unfreeze();\n }\n\n prepareDom() {\n this.wrapper.innerHTML = `\n \n \n
\n
\n
\n ${this.options.freezeMessage}\n
\n \n
\n `;\n\n this.datatableWrapper = $('.data-table', this.wrapper);\n this.header = $('.data-table-header', this.wrapper);\n this.bodyScrollable = $('.body-scrollable', this.wrapper);\n this.freezeContainer = $('.freeze-container', this.wrapper);\n }\n\n refresh(data) {\n this.datamanager.init(data);\n this.render();\n this.setDimensions();\n if (this.cellmanager.$focusedCell) {\n this.cellmanager.$focusedCell.focus();\n }\n }\n\n destroy() {\n this.wrapper.innerHTML = '';\n this.style.destroy();\n }\n\n appendRows(rows) {\n this.datamanager.appendRows(rows);\n this.rowmanager.refreshRows();\n }\n\n refreshRow(row, rowIndex) {\n this.rowmanager.refreshRow(row, rowIndex);\n }\n\n render() {\n this.renderHeader();\n this.renderBody();\n }\n\n renderHeader() {\n this.columnmanager.renderHeader();\n }\n\n renderBody() {\n this.bodyRenderer.render();\n }\n\n setDimensions() {\n this.columnmanager.setDimensions();\n\n this.setBodyWidth();\n\n $.style(this.bodyScrollable, {\n marginTop: $.style(this.header, 'height') + 'px'\n });\n\n $.style($('table', this.bodyScrollable), {\n margin: 0\n });\n }\n\n setBodyWidth() {\n const width = $.style(this.header, 'width');\n\n $.style(this.bodyScrollable, { width: width + 'px' });\n }\n\n getColumn(colIndex) {\n return this.datamanager.getColumn(colIndex);\n }\n\n getCell(colIndex, rowIndex) {\n return this.datamanager.getCell(colIndex, rowIndex);\n }\n\n getColumnHeaderElement(colIndex) {\n return this.columnmanager.getColumnHeaderElement(colIndex);\n }\n\n getViewportHeight() {\n if (!this.viewportHeight) {\n this.viewportHeight = $.style(this.bodyScrollable, 'height');\n }\n\n return this.viewportHeight;\n }\n\n sortColumn(colIndex, sortOrder) {\n this.columnmanager.sortColumn(colIndex, sortOrder);\n }\n\n removeColumn(colIndex) {\n this.columnmanager.removeColumn(colIndex);\n }\n\n scrollToLastColumn() {\n this.datatableWrapper.scrollLeft = 9999;\n }\n\n freeze() {\n $.style(this.freezeContainer, {\n display: ''\n });\n }\n\n unfreeze() {\n $.style(this.freezeContainer, {\n display: 'none'\n });\n }\n\n fireEvent(eventName, ...args) {\n this.events[eventName].apply(this, args);\n }\n\n log() {\n if (this.options.enableLogs) {\n console.log.apply(console, arguments);\n }\n }\n}\n\nDataTable.instances = 0;\n\nexport default DataTable;\n\n\n\n// WEBPACK FOOTER //\n// ./src/datatable.js","import { isNumeric, promisify } from './utils';\n\nexport default class DataManager {\n constructor(options) {\n this.options = options;\n this.sortRows = promisify(this.sortRows, this);\n this.switchColumn = promisify(this.switchColumn, this);\n this.removeColumn = promisify(this.removeColumn, this);\n }\n\n init(data) {\n if (!data) {\n data = this.options.data;\n }\n\n this.data = data;\n\n this.rowCount = 0;\n this.columns = [];\n this.rows = [];\n\n this.prepareColumns();\n this.prepareRows();\n\n this.prepareNumericColumns();\n }\n\n // computed property\n get currentSort() {\n const col = this.columns.find(col => col.sortOrder !== 'none');\n return col || {\n colIndex: -1,\n sortOrder: 'none'\n };\n }\n\n prepareColumns() {\n this.columns = [];\n this.validateColumns();\n this.prepareDefaultColumns();\n this.prepareHeader();\n }\n\n prepareDefaultColumns() {\n if (this.options.addCheckboxColumn && !this.hasColumnById('_checkbox')) {\n const cell = {\n id: '_checkbox',\n content: this.getCheckboxHTML(),\n editable: false,\n resizable: false,\n sortable: false,\n focusable: false,\n dropdown: false,\n width: 25\n };\n this.columns.push(cell);\n }\n\n if (this.options.addSerialNoColumn && !this.hasColumnById('_rowIndex')) {\n let cell = {\n id: '_rowIndex',\n content: '',\n align: 'center',\n editable: false,\n resizable: false,\n focusable: false,\n dropdown: false,\n width: 30\n };\n\n this.columns.push(cell);\n }\n }\n\n prepareRow(row, i) {\n const baseRowCell = {\n rowIndex: i\n };\n\n return row\n .map((cell, i) => this.prepareCell(cell, i))\n .map(cell => Object.assign({}, baseRowCell, cell));\n }\n\n prepareHeader() {\n let columns = this.columns.concat(this.options.columns);\n const baseCell = {\n isHeader: 1,\n editable: true,\n sortable: true,\n resizable: true,\n focusable: true,\n dropdown: true,\n format: (value) => {\n if (value === null || value === undefined) {\n return '';\n }\n return value + '';\n }\n };\n\n this.columns = columns\n .map((cell, i) => this.prepareCell(cell, i))\n .map(col => Object.assign({}, baseCell, col))\n .map(col => {\n col.id = col.id || col.content;\n return col;\n });\n }\n\n prepareCell(content, i) {\n const cell = {\n content: '',\n align: 'left',\n sortOrder: 'none',\n colIndex: i,\n column: this.columns[i],\n width: 0\n };\n\n if (content !== null && typeof content === 'object') {\n // passed as column/header\n Object.assign(cell, content);\n } else {\n cell.content = content;\n }\n\n return cell;\n }\n\n prepareNumericColumns() {\n const row0 = this.getRow(0);\n if (!row0) return;\n this.columns = this.columns.map((column, i) => {\n\n const cellValue = row0[i].content;\n if (!column.align && cellValue && isNumeric(cellValue)) {\n column.align = 'right';\n }\n\n return column;\n });\n }\n\n prepareRows() {\n this.validateData(this.data);\n\n this.rows = this.data.map((d, i) => {\n const index = this._getNextRowCount();\n\n let row = [];\n\n if (Array.isArray(d)) {\n // row is an array\n if (this.options.addCheckboxColumn) {\n row.push(this.getCheckboxHTML());\n }\n if (this.options.addSerialNoColumn) {\n row.push((index + 1) + '');\n }\n row = row.concat(d);\n\n } else {\n // row is a dict\n for (let col of this.columns) {\n if (col.id === '_checkbox') {\n row.push(this.getCheckboxHTML());\n } else if (col.id === '_rowIndex') {\n row.push((index + 1) + '');\n } else {\n row.push(col.format(d[col.id]));\n }\n }\n }\n\n return this.prepareRow(row, index);\n });\n }\n\n validateColumns() {\n const columns = this.options.columns;\n if (!Array.isArray(columns)) {\n throw new DataError('`columns` must be an array');\n }\n\n columns.forEach((column, i) => {\n if (typeof column !== 'string' && typeof column !== 'object') {\n throw new DataError(`column \"${i}\" must be a string or an object`);\n }\n });\n }\n\n validateData(data) {\n if (Array.isArray(data) &&\n (data.length === 0 || Array.isArray(data[0]) || typeof data[0] === 'object')) {\n return true;\n }\n throw new DataError('`data` must be an array of arrays or objects');\n }\n\n appendRows(rows) {\n this.validateData(rows);\n\n this.rows = this.rows.concat(this.prepareRows(rows));\n }\n\n sortRows(colIndex, sortOrder = 'none') {\n colIndex = +colIndex;\n\n // reset sortOrder and update for colIndex\n this.getColumns()\n .map(col => {\n if (col.colIndex === colIndex) {\n col.sortOrder = sortOrder;\n } else {\n col.sortOrder = 'none';\n }\n });\n\n this._sortRows(colIndex, sortOrder);\n }\n\n _sortRows(colIndex, sortOrder) {\n\n if (this.currentSort.colIndex === colIndex) {\n // reverse the array if only sortOrder changed\n if (\n (this.currentSort.sortOrder === 'asc' && sortOrder === 'desc') ||\n (this.currentSort.sortOrder === 'desc' && sortOrder === 'asc')\n ) {\n this.reverseArray(this.rows);\n this.currentSort.sortOrder = sortOrder;\n return;\n }\n }\n\n this.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 (sortOrder === 'none') {\n return _aIndex - _bIndex;\n } else if (sortOrder === 'asc') {\n if (_a < _b) return -1;\n if (_a > _b) return 1;\n if (_a === _b) return 0;\n } else if (sortOrder === '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 if (this.hasColumnById('_rowIndex')) {\n // update row index\n const srNoColIndex = this.getColumnIndexById('_rowIndex');\n this.rows = this.rows.map((row, index) => {\n return row.map(cell => {\n if (cell.colIndex === srNoColIndex) {\n cell.content = (index + 1) + '';\n }\n return cell;\n });\n });\n }\n }\n\n reverseArray(array) {\n let left = null;\n let right = null;\n let length = array.length;\n\n for (left = 0, right = length - 1; left < right; left += 1, right -= 1) {\n const temporary = array[left];\n\n array[left] = array[right];\n array[right] = temporary;\n }\n }\n\n switchColumn(index1, index2) {\n // update columns\n const temp = this.columns[index1];\n this.columns[index1] = this.columns[index2];\n this.columns[index2] = temp;\n\n this.columns[index1].colIndex = index1;\n this.columns[index2].colIndex = index2;\n\n // update rows\n this.rows = this.rows.map(row => {\n const newCell1 = Object.assign({}, row[index1], { colIndex: index2 });\n const newCell2 = Object.assign({}, row[index2], { colIndex: index1 });\n\n let newRow = row.map(cell => {\n // make object copy\n return Object.assign({}, cell);\n });\n\n newRow[index2] = newCell1;\n newRow[index1] = newCell2;\n\n return newRow;\n });\n }\n\n removeColumn(index) {\n index = +index;\n const filter = cell => cell.colIndex !== index;\n const map = (cell, i) => Object.assign({}, cell, { colIndex: i });\n // update columns\n this.columns = this.columns\n .filter(filter)\n .map(map);\n\n // update rows\n this.rows = this.rows.map(row => {\n const newRow = row\n .filter(filter)\n .map(map);\n\n return newRow;\n });\n }\n\n updateRow(row, rowIndex) {\n if (row.length < this.columns.length) {\n if (this.hasColumnById('_rowIndex')) {\n const val = (rowIndex + 1) + '';\n\n row = [val].concat(row);\n }\n\n if (this.hasColumnById('_checkbox')) {\n const val = '';\n\n row = [val].concat(row);\n }\n }\n\n const _row = this.prepareRow(row, rowIndex);\n const index = this.rows.findIndex(row => row[0].rowIndex === rowIndex);\n this.rows[index] = _row;\n\n return _row;\n }\n\n updateCell(colIndex, rowIndex, options) {\n let cell;\n if (typeof colIndex === 'object') {\n // cell object was passed,\n // must have colIndex, rowIndex\n cell = colIndex;\n colIndex = cell.colIndex;\n rowIndex = cell.rowIndex;\n // the object passed must be merged with original cell\n options = cell;\n }\n cell = this.getCell(colIndex, rowIndex);\n\n // mutate object directly\n for (let key in options) {\n const newVal = options[key];\n if (newVal !== undefined) {\n cell[key] = newVal;\n }\n }\n\n return cell;\n }\n\n updateColumn(colIndex, keyValPairs) {\n const column = this.getColumn(colIndex);\n for (let key in keyValPairs) {\n const newVal = keyValPairs[key];\n if (newVal !== undefined) {\n column[key] = newVal;\n }\n }\n return column;\n }\n\n getRowCount() {\n return this.rowCount;\n }\n\n _getNextRowCount() {\n const val = this.rowCount;\n\n this.rowCount++;\n return val;\n }\n\n getRows(start, end) {\n return this.rows.slice(start, end);\n }\n\n getColumns(skipStandardColumns) {\n let columns = this.columns;\n\n if (skipStandardColumns) {\n columns = columns.slice(this.getStandardColumnCount());\n }\n\n return columns;\n }\n\n getStandardColumnCount() {\n if (this.options.addCheckboxColumn && this.options.addSerialNoColumn) {\n return 2;\n }\n\n if (this.options.addCheckboxColumn || this.options.addSerialNoColumn) {\n return 1;\n }\n\n return 0;\n }\n\n getColumnCount(skipStandardColumns) {\n let val = this.columns.length;\n\n if (skipStandardColumns) {\n val = val - this.getStandardColumnCount();\n }\n\n return val;\n }\n\n getColumn(colIndex) {\n colIndex = +colIndex;\n return this.columns.find(col => col.colIndex === colIndex);\n }\n\n getRow(rowIndex) {\n rowIndex = +rowIndex;\n return this.rows.find(row => row[0].rowIndex === rowIndex);\n }\n\n getCell(colIndex, rowIndex) {\n rowIndex = +rowIndex;\n colIndex = +colIndex;\n return this.rows.find(row => row[0].rowIndex === rowIndex)[colIndex];\n }\n\n get() {\n return {\n columns: this.columns,\n rows: this.rows\n };\n }\n\n hasColumn(name) {\n return Boolean(this.columns.find(col => col.content === name));\n }\n\n hasColumnById(id) {\n return Boolean(this.columns.find(col => col.id === id));\n }\n\n getColumnIndex(name) {\n return this.columns.findIndex(col => col.content === name);\n }\n\n getColumnIndexById(id) {\n return this.columns.findIndex(col => col.id === id);\n }\n\n getCheckboxHTML() {\n return '';\n }\n}\n\n// Custom Errors\nexport class DataError extends TypeError {};\n\n\n\n// WEBPACK FOOTER //\n// ./src/datamanager.js","module.exports = __WEBPACK_EXTERNAL_MODULE_9__;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external {\"commonjs\":\"sortablejs\",\"commonjs2\":\"sortablejs\",\"root\":\"Sortable\"}\n// module id = 9\n// module chunks = 0","import $ from './dom';\nimport Clusterize from 'clusterize.js';\nimport { getRowHTML } from './rowmanager';\nimport { promisify } from './utils';\n\nexport default class BodyRenderer {\n constructor(instance) {\n this.instance = instance;\n this.options = instance.options;\n this.datamanager = instance.datamanager;\n this.rowmanager = instance.rowmanager;\n this.cellmanager = instance.cellmanager;\n this.bodyScrollable = instance.bodyScrollable;\n this.log = instance.log;\n this.appendRemainingData = promisify(this.appendRemainingData, this);\n }\n\n render() {\n if (this.options.enableClusterize) {\n this.renderBodyWithClusterize();\n } else {\n this.renderBodyHTML();\n }\n }\n\n renderBodyHTML() {\n const rows = this.datamanager.getRows();\n\n this.bodyScrollable.innerHTML = `\n \n ${getBodyHTML(rows)}\n
\n `;\n this.instance.setDimensions();\n this.restoreState();\n }\n\n renderBodyWithClusterize() {\n // first page\n const rows = this.datamanager.getRows(0, 20);\n const initialData = this.getDataForClusterize(rows);\n\n if (!this.clusterize) {\n // empty body\n this.bodyScrollable.innerHTML = `\n \n `;\n\n // first 20 rows will appended\n // rest of them in nextTick\n this.clusterize = new Clusterize({\n rows: initialData,\n scrollElem: this.bodyScrollable,\n contentElem: $('tbody', this.bodyScrollable),\n callbacks: {\n clusterChanged: () => {\n this.restoreState();\n }\n },\n /* eslint-disable */\n no_data_text: this.options.loadingText,\n no_data_class: 'empty-state'\n /* eslint-enable */\n });\n\n // setDimensions requires atleast 1 row to exist in dom\n this.instance.setDimensions();\n } else {\n this.clusterize.update(initialData);\n }\n\n this.appendRemainingData();\n }\n\n restoreState() {\n this.rowmanager.highlightCheckedRows();\n this.cellmanager.selectAreaOnClusterChanged();\n this.cellmanager.focusCellOnClusterChanged();\n }\n\n appendRemainingData() {\n const rows = this.datamanager.getRows(20);\n const data = this.getDataForClusterize(rows);\n this.clusterize.append(data);\n }\n\n getDataForClusterize(rows) {\n return rows.map((row) => getRowHTML(row, { rowIndex: row[0].rowIndex }));\n }\n};\n\nexport function getBodyHTML(rows) {\n return `\n \n ${rows.map(row => getRowHTML(row, { rowIndex: row[0].rowIndex })).join('')}\n \n `;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/body-renderer.js","module.exports = __WEBPACK_EXTERNAL_MODULE_11__;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external {\"commonjs\":\"clusterize.js\",\"commonjs2\":\"clusterize.js\",\"root\":\"Clusterize\"}\n// module id = 11\n// module chunks = 0","import { camelCaseToDash } from './utils';\n\nexport default class Style {\n\n constructor(datatable) {\n this.datatable = datatable;\n this.scopeClass = 'datatable-instance-' + datatable.constructor.instances;\n datatable.datatableWrapper.classList.add(this.scopeClass);\n\n const styleEl = document.createElement('style');\n datatable.wrapper.insertBefore(styleEl, datatable.datatableWrapper);\n this.styleEl = styleEl;\n this.styleSheet = styleEl.sheet;\n }\n\n destroy() {\n this.styleEl.remove();\n }\n\n setStyle(rule, styleMap, index = -1) {\n const styles = Object.keys(styleMap)\n .map(prop => {\n if (!prop.includes('-')) {\n prop = camelCaseToDash(prop);\n }\n return `${prop}:${styleMap[prop]};`;\n })\n .join('');\n let ruleString = `.${this.scopeClass} ${rule} { ${styles} }`;\n\n let _index = this.styleSheet.cssRules.length;\n if (index !== -1) {\n this.styleSheet.deleteRule(index);\n _index = index;\n }\n\n this.styleSheet.insertRule(ruleString, _index);\n return _index;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/style.js","export default {\n columns: [],\n data: [],\n dropdownButton: '▼',\n headerDropdown: [\n {\n label: 'Sort Ascending',\n action: function (column) {\n this.sortColumn(column.colIndex, 'asc');\n }\n },\n {\n label: 'Sort Descending',\n action: function (column) {\n this.sortColumn(column.colIndex, 'desc');\n }\n },\n {\n label: 'Reset sorting',\n action: function (column) {\n this.sortColumn(column.colIndex, 'none');\n }\n },\n {\n label: 'Remove column',\n action: function (column) {\n this.removeColumn(column.colIndex);\n }\n }\n ],\n events: {\n onRemoveColumn(column) {},\n onSwitchColumn(column1, column2) {},\n onSortColumn(column) {}\n },\n sortIndicator: {\n asc: '↑',\n desc: '↓',\n none: ''\n },\n freezeMessage: '',\n editing: () => {},\n addSerialNoColumn: true,\n addCheckboxColumn: false,\n enableClusterize: true,\n enableLogs: false,\n takeAvailableSpace: false,\n loadingText: ''\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/defaults.js","// style-loader: Adds some css to the DOM by adding a