From 1d7278d3d646a6b8baf4676310e10e58d0fd3fca Mon Sep 17 00:00:00 2001 From: Faris Ansari Date: Sun, 5 Nov 2017 14:30:22 +0530 Subject: [PATCH] Refactor style, use native styleSheet method to set style --- .eslintrc | 2 +- lib/frappe-datatable.js | 309 +++++++++++++++++++++++++----------- lib/frappe-datatable.js.map | 2 +- src/cellmanager.js | 31 ++-- src/datatable.js | 36 ++--- src/performance.js | 14 ++ src/style.js | 53 +++++++ src/utils.js | 3 +- 8 files changed, 307 insertions(+), 143 deletions(-) create mode 100644 src/performance.js create mode 100644 src/style.js diff --git a/.eslintrc b/.eslintrc index 24853ac..77f95d6 100644 --- a/.eslintrc +++ b/.eslintrc @@ -62,7 +62,7 @@ "max-params": 0, "max-statements": 0, "new-cap": [2, { "newIsCap": true, "capIsNew": false }], - "newline-after-var": [2, "always"], + "newline-after-var": [0, "always"], "new-parens": 2, "no-alert": 0, "no-array-constructor": 2, diff --git a/lib/frappe-datatable.js b/lib/frappe-datatable.js index 23169d7..9bd0403 100644 --- a/lib/frappe-datatable.js +++ b/lib/frappe-datatable.js @@ -350,7 +350,8 @@ exports.default = { getDefault: getDefault, escapeRegExp: escapeRegExp, getCellContent: getCellContent, - copyTextToClipboard: copyTextToClipboard + copyTextToClipboard: copyTextToClipboard, + camelCaseToDash: camelCaseToDash }; module.exports = exports['default']; @@ -404,6 +405,10 @@ var _cellmanager = __webpack_require__(4); var _cellmanager2 = _interopRequireDefault(_cellmanager); +var _style = __webpack_require__(12); + +var _style2 = _interopRequireDefault(_style); + __webpack_require__(6); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -653,15 +658,15 @@ var DataTable = function () { this.setBodyWidth(); - this.setStyle('.data-table .body-scrollable', { - 'margin-top': this.header.height() + 'px' + this.style.set(this.bodyScrollable[0], { + marginTop: this.header.height() + 'px' }); // center align Sr. No column if (this.options.addSerialNoColumn) { var index = this.getSerialColumnIndex(); - this.setStyle('.data-table [data-col-index="' + index + '"]', { + this.style.setStyle('.data-table [data-col-index="' + index + '"]', { 'text-align': 'center' }); } @@ -863,32 +868,32 @@ var DataTable = function () { key: 'setColumnWidth', value: function setColumnWidth(colIndex, width) { // set width for content - this.setStyle('[data-col-index="' + colIndex + '"] .content', { + this.style.setStyle('[data-col-index="' + colIndex + '"] .content', { width: width + 'px' }); // set width for edit cell - this.setStyle('[data-col-index="' + colIndex + '"] .edit-cell', { + this.style.setStyle('[data-col-index="' + colIndex + '"] .edit-cell', { width: width + 'px' }); } }, { key: 'setColumnHeaderWidth', value: function setColumnHeaderWidth(colIndex, width) { - this.setStyle('[data-col-index="' + colIndex + '"][data-is-header] .content', { + this.style.setStyle('[data-col-index="' + colIndex + '"][data-is-header] .content', { width: width + 'px' }); } }, { key: 'setDefaultCellHeight', value: function setDefaultCellHeight(height) { - this.setStyle('.data-table-col .content', { + this.style.setStyle('.data-table-col .content', { height: height + 'px' }); } }, { key: 'setRowHeight', value: function setRowHeight(rowIndex, height) { - this.setStyle('[data-row-index="' + rowIndex + '"] .content', { + this.style.setStyle('[data-row-index="' + rowIndex + '"] .content', { height: height + 'px' }); } @@ -926,26 +931,10 @@ var DataTable = function () { value: function setBodyWidth() { this.bodyScrollable.css('width', parseInt(this.header.css('width'), 10)); } - }, { - key: 'setStyle', - value: function setStyle(rule, styleMap) { - var styles = this.$style.text(); - - styles = (0, _utils.buildCSSRule)(rule, styleMap, styles); - this.$style.html(styles); - } - }, { - key: 'removeStyle', - value: function removeStyle(rule) { - var styles = this.$style.text(); - - styles = (0, _utils.removeCSSRule)(rule, styles); - this.$style.html(styles); - } }, { key: 'makeStyle', value: function makeStyle() { - this.$style = $('').prependTo(this.wrapper); + this.style = new _style2.default(this.wrapper); } }, { key: 'getColumn', @@ -1338,6 +1327,10 @@ var _keyboard = __webpack_require__(5); var _keyboard2 = _interopRequireDefault(_keyboard); +var _performance = __webpack_require__(13); + +var _performance2 = _interopRequireDefault(_performance); + 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); } } @@ -1350,6 +1343,7 @@ var CellManager = function () { this.instance = instance; this.options = this.instance.options; + this.style = this.instance.style; this.bodyScrollable = this.instance.bodyScrollable; this.prepare(); @@ -1367,7 +1361,6 @@ var CellManager = function () { value: function bindEvents() { this.bindFocusCell(); this.bindEditCell(); - this.bindKeyboardNav(); this.bindKeyboardSelection(); this.bindCopyCellContents(); this.bindMouseEvents(); @@ -1375,19 +1368,12 @@ var CellManager = function () { }, { key: 'bindFocusCell', value: function bindFocusCell() { - var _this = this; - - var bodyScrollable = this.instance.bodyScrollable; - - this.$focusedCell = null; - bodyScrollable.on('click', '.data-table-col', function (e) { - _this.focusCell($(e.currentTarget)); - }); + this.bindKeyboardNav(); } }, { key: 'bindEditCell', value: function bindEditCell() { - var _this2 = this; + var _this = this; var self = this; @@ -1397,80 +1383,80 @@ var CellManager = function () { }); _keyboard2.default.on('enter', function (e) { - if (_this2.$focusedCell && !_this2.$editingCell) { + if (_this.$focusedCell && !_this.$editingCell) { // enter keypress on focused cell - _this2.activateEditing(_this2.$focusedCell); - } else if (_this2.$editingCell) { + _this.activateEditing(_this.$focusedCell); + } else if (_this.$editingCell) { // enter keypress on editing cell - _this2.submitEditing(_this2.$editingCell); - _this2.deactivateEditing(); + _this.submitEditing(_this.$editingCell); + _this.deactivateEditing(); } }); $(document.body).on('click', function (e) { if ($(e.target).is('.edit-cell, .edit-cell *')) return; - _this2.deactivateEditing(); + _this.deactivateEditing(); }); } }, { key: 'bindKeyboardNav', value: function bindKeyboardNav() { - var _this3 = this; + var _this2 = this; var focusCell = function focusCell(direction) { - if (!_this3.$focusedCell || _this3.$editingCell) { + if (!_this2.$focusedCell || _this2.$editingCell) { return false; } - var $cell = _this3.$focusedCell; + var $cell = _this2.$focusedCell; if (direction === 'left') { - $cell = _this3.getLeftCell$($cell); + $cell = _this2.getLeftCell$($cell); } else if (direction === 'right') { - $cell = _this3.getRightCell$($cell); + $cell = _this2.getRightCell$($cell); } else if (direction === 'up') { - $cell = _this3.getAboveCell$($cell); + $cell = _this2.getAboveCell$($cell); } else if (direction === 'down') { - $cell = _this3.getBelowCell$($cell); + $cell = _this2.getBelowCell$($cell); } - _this3.focusCell($cell); + _this2.focusCell($cell); return true; }; var focusLastCell = function focusLastCell(direction) { - if (!_this3.$focusedCell || _this3.$editingCell) { + if (!_this2.$focusedCell || _this2.$editingCell) { return false; } - var $cell = _this3.$focusedCell; + var $cell = _this2.$focusedCell; - var _getCellAttr = _this3.getCellAttr($cell), + var _getCellAttr = _this2.getCellAttr($cell), rowIndex = _getCellAttr.rowIndex, colIndex = _getCellAttr.colIndex; if (direction === 'left') { - $cell = _this3.getLeftMostCell$(rowIndex); + $cell = _this2.getLeftMostCell$(rowIndex); } else if (direction === 'right') { - $cell = _this3.getRightMostCell$(rowIndex); + $cell = _this2.getRightMostCell$(rowIndex); } else if (direction === 'up') { - $cell = _this3.getTopMostCell$(colIndex); + $cell = _this2.getTopMostCell$(colIndex); } else if (direction === 'down') { - $cell = _this3.getBottomMostCell$(colIndex); + $cell = _this2.getBottomMostCell$(colIndex); } - _this3.focusCell($cell); + _this2.focusCell($cell); return true; }; var scrollToCell = function scrollToCell(direction) { - if (!_this3.$focusedCell) return false; + if (!_this2.$focusedCell) return false; - if (!_this3.inViewport(_this3.$focusedCell)) { - var _getCellAttr2 = _this3.getCellAttr(_this3.$focusedCell), + if (!_this2.inViewport(_this2.$focusedCell)) { + var _getCellAttr2 = _this2.getCellAttr(_this2.$focusedCell), rowIndex = _getCellAttr2.rowIndex; - _this3.scrollToRow(rowIndex - _this3.getRowCountPerPage() + 2); + _this2.scrollToRow(rowIndex - _this2.getRowCountPerPage() + 2); return true; } @@ -1496,25 +1482,25 @@ var CellManager = function () { }); _keyboard2.default.on('esc', function () { - _this3.deactivateEditing(); + _this2.deactivateEditing(); }); } }, { key: 'bindKeyboardSelection', value: function bindKeyboardSelection() { - var _this4 = this; + var _this3 = this; var getNextSelectionCursor = function getNextSelectionCursor(direction) { - var $selectionCursor = _this4.getSelectionCursor(); + var $selectionCursor = _this3.getSelectionCursor(); if (direction === 'left') { - $selectionCursor = _this4.getLeftCell$($selectionCursor); + $selectionCursor = _this3.getLeftCell$($selectionCursor); } else if (direction === 'right') { - $selectionCursor = _this4.getRightCell$($selectionCursor); + $selectionCursor = _this3.getRightCell$($selectionCursor); } else if (direction === 'up') { - $selectionCursor = _this4.getAboveCell$($selectionCursor); + $selectionCursor = _this3.getAboveCell$($selectionCursor); } else if (direction === 'down') { - $selectionCursor = _this4.getBelowCell$($selectionCursor); + $selectionCursor = _this3.getBelowCell$($selectionCursor); } return $selectionCursor; @@ -1522,29 +1508,29 @@ var CellManager = function () { ['left', 'right', 'up', 'down'].map(function (direction) { return _keyboard2.default.on('shift+' + direction, function () { - return _this4.selectArea(getNextSelectionCursor(direction)); + return _this3.selectArea(getNextSelectionCursor(direction)); }); }); } }, { key: 'bindCopyCellContents', value: function bindCopyCellContents() { - var _this5 = this; + var _this4 = this; _keyboard2.default.on('ctrl+c', function () { - _this5.copyCellContents(_this5.$focusedCell, _this5.$selectionCursor); + _this4.copyCellContents(_this4.$focusedCell, _this4.$selectionCursor); }); } }, { key: 'bindMouseEvents', value: function bindMouseEvents() { - var _this6 = this; + var _this5 = this; var mouseDown = null; this.bodyScrollable.on('mousedown', '.data-table-col', function (e) { mouseDown = true; - _this6.focusCell($(e.currentTarget)); + _this5.focusCell($(e.currentTarget)); }); this.bodyScrollable.on('mouseup', function () { @@ -1553,7 +1539,7 @@ var CellManager = function () { this.bodyScrollable.on('mousemove', '.data-table-col', function (e) { if (!mouseDown) return; - _this6.selectArea($(e.currentTarget)); + _this5.selectArea($(e.currentTarget)); }); } }, { @@ -1595,23 +1581,18 @@ var CellManager = function () { 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.lastSelectors) { - this.instance.removeStyle(this.lastSelectors.colHeaderSelector); - this.instance.removeStyle(this.lastSelectors.rowHeaderSelector); + if (this.lastHeaders) { + this.style.unset(this.lastHeaders, 'backgroundColor'); } - this.instance.setStyle(colHeaderSelector, { - 'background-color': 'var(--light-bg)' + var colHeader = document.querySelector(colHeaderSelector); + var rowHeader = document.querySelector(rowHeaderSelector); + + this.style.set([colHeader, rowHeader], { + backgroundColor: 'var(--light-bg)' }); - this.instance.setStyle(rowHeaderSelector, { - 'background-color': 'var(--light-bg)' - }); - - this.lastSelectors = { - colHeaderSelector: colHeaderSelector, - rowHeaderSelector: rowHeaderSelector - }; + this.lastHeaders = [colHeader, rowHeader]; } }, { key: 'selectArea', @@ -1626,7 +1607,7 @@ var CellManager = function () { }, { key: '_selectArea', value: function _selectArea($cell1, $cell2) { - var _this7 = this; + var _this6 = this; var cells = this.getCellsInRange.apply(this, arguments); @@ -1637,7 +1618,7 @@ var CellManager = function () { c = _ref2[0], r = _ref2[1]; - return _this7.getCell$(r, c)[0]; + return _this6.getCell$(r, c)[0]; }); $($cells).addClass('highlight'); @@ -1792,7 +1773,7 @@ var CellManager = function () { }, { key: 'submitEditing', value: function submitEditing($cell) { - var _this8 = this; + var _this7 = this; var _getCellAttr7 = this.getCellAttr($cell), rowIndex = _getCellAttr7.rowIndex, @@ -1808,7 +1789,7 @@ var CellManager = function () { if (done && done.then) { // wait for promise then update internal state done.then(function () { - return _this8.updateCell(rowIndex, colIndex, value); + return _this7.updateCell(rowIndex, colIndex, value); }); } else { this.updateCell(rowIndex, colIndex, value); @@ -1821,7 +1802,7 @@ var CellManager = function () { }, { key: 'copyCellContents', value: function copyCellContents($cell1, $cell2) { - var _this9 = this; + var _this8 = this; var cells = this.getCellsInRange.apply(this, arguments); @@ -1830,7 +1811,7 @@ var CellManager = function () { var values = cells // get cell objects .map(function (index) { - return _this9.getCell.apply(_this9, _toConsumableArray(index)); + return _this8.getCell.apply(_this8, _toConsumableArray(index)); }) // convert to array of rows .reduce(function (acc, curr) { @@ -2660,6 +2641,146 @@ module.exports = function (css) { module.exports = {"name":"frappe-datatable","version":"0.0.1","description":"A modern datatable library for the web","main":"lib/frappe-datatable.js","scripts":{"build":"webpack --env build","dev":"webpack --progress --colors --watch --env dev","test":"mocha --compilers js:babel-core/register --colors ./test/*.spec.js","test:watch":"mocha --compilers js:babel-core/register --colors -w ./test/*.spec.js"},"devDependencies":{"babel-cli":"6.24.1","babel-core":"6.24.1","babel-eslint":"7.2.3","babel-loader":"7.0.0","babel-plugin-add-module-exports":"0.2.1","babel-preset-es2015":"6.24.1","chai":"3.5.0","css-loader":"^0.28.7","eslint":"3.19.0","eslint-loader":"1.7.1","mocha":"3.3.0","node-sass":"^4.5.3","sass-loader":"^6.0.6","style-loader":"^0.18.2","webpack":"^3.1.0","yargs":"7.1.0"},"repository":{"type":"git","url":"https://github.com/frappe/datatable.git"},"keywords":["webpack","es6","starter","library","universal","umd","commonjs"],"author":"Faris Ansari","license":"MIT","bugs":{"url":"https://github.com/frappe/datatable/issues"},"homepage":"https://frappe.github.io/datatable","dependencies":{"bootstrap":"^4.0.0-beta","popper.js":"^1.12.5"}} +/***/ }), +/* 12 */ +/***/ (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 _utils = __webpack_require__(0); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var Style = function () { + function Style(wrapper) { + _classCallCheck(this, Style); + + var styleEl = document.createElement('style'); + + document.head.appendChild(styleEl); + this.styleSheet = styleEl.sheet; + } + + _createClass(Style, [{ + key: 'setStyle', + value: function setStyle(rule, styleMap) { + var styles = Object.keys(styleMap).map(function (prop) { + if (!prop.includes('-')) { + prop = (0, _utils.camelCaseToDash)(prop); + } + return prop + ':' + styleMap[prop] + ';'; + }).join(''); + var ruleString = rule + ' { ' + styles + ' }'; + + this.styleSheet.insertRule(ruleString, this.styleSheet.cssRules.length); + } + }, { + key: 'set', + value: function set(elements, styleMap) { + if (!Array.isArray(elements)) { + elements = [elements]; + } + + elements.map(function (element) { + for (var prop in styleMap) { + element.style[prop] = styleMap[prop]; + } + }); + } + }, { + key: 'unset', + value: function unset(elements, styleProps) { + if (!Array.isArray(elements)) { + elements = [elements]; + } + + if (!Array.isArray(styleProps)) { + styleProps = [styleProps]; + } + + elements.map(function (element) { + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; + + try { + for (var _iterator = styleProps[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var prop = _step.value; + + element.style[prop] = ''; + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator.return) { + _iterator.return(); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } + } + }); + } + }]); + + return Style; +}(); + +exports.default = Style; +module.exports = exports['default']; + +/***/ }), +/* 13 */ +/***/ (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; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var Performance = function () { + function Performance() { + _classCallCheck(this, Performance); + } + + _createClass(Performance, [{ + key: "start", + value: function start() { + this._start = window.performance.now(); + } + }, { + key: "end", + value: function end() { + this._end = window.performance.now(); + console.log(this._end - this._start); + } + }]); + + return Performance; +}(); + +var perf = new Performance(); + +exports.default = perf; +module.exports = exports["default"]; + /***/ }) /******/ ]); }); diff --git a/lib/frappe-datatable.js.map b/lib/frappe-datatable.js.map index b61d27d..e96a83a 100644 --- a/lib/frappe-datatable.js.map +++ b/lib/frappe-datatable.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 970596eedfdc34ae95e3","webpack:///./src/utils.js","webpack:///./src/index.js","webpack:///./src/datatable.js","webpack:///./src/datamanager.js","webpack:///./src/cellmanager.js","webpack:///./src/keyboard.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":["camelCaseToDash","str","replace","g","toLowerCase","makeDataAttributeString","props","keys","Object","map","key","_key","val","undefined","join","trim","getEditCellHTML","getColumnHTML","column","rowIndex","colIndex","isHeader","dataAttr","getCellContent","editCellHTML","sortIndicator","format","content","getRowHTML","columns","getHeaderHTML","$header","getBodyHTML","rows","row","prepareColumn","col","i","assign","prepareColumns","_columns","prepareRowHeader","prepareRow","prepareRows","getDefault","a","b","escapeRegExp","getCSSString","styleMap","style","prop","hasOwnProperty","getCSSRuleBlock","rule","namespaceSelector","selector","buildCSSRule","cssRulesString","rulePatternStr","rulePattern","RegExp","match","property","value","propPattern","propertyStr","valueStr","replacer","removeCSSRule","output","copyTextToClipboard","text","textArea","document","createElement","position","top","left","width","height","padding","border","outline","boxShadow","background","body","appendChild","select","execCommand","err","console","log","removeChild","__version__","version","DEFAULT_OPTIONS","events","data","editing","addSerialNoColumn","addCheckboxColumn","enableClusterize","enableLogs","takeAvailableSpace","DataTable","wrapper","options","$","length","Error","checkMap","make","datamanager","cellmanager","refresh","find","makeDom","makeStyle","bindEvents","html","header","bodyScrollable","footer","$borders","init","render","appendRows","renderHeader","renderBody","setDimensions","getColumns","renderBodyWithClusterize","renderBodyHTML","getRows","self","start","pageLength","end","initialData","getDataForClusterize","clusterize","Clusterize","scrollElem","get","contentElem","callbacks","clusterChanged","highlightCheckedRows","appendRemainingData","dataAppended","promises","rowCount","getRowCount","push","appendNextPagePromise","reduce","prev","cur","then","Promise","resolve","setTimeout","append","bindResizeColumn","bindSortColumn","bindCheckbox","css","margin","minWidthMap","each","parseInt","attr","$cell","getCellAttr","minWidth","getColumnMinWidth","setColumnWidth","setDefaultCellHeight","setBodyWidth","setStyle","index","getSerialColumnIndex","isDragging","$currCell","startWidth","startX","on","e","getColumn","resizable","pageX","finalWidth","setColumnHeaderWidth","closest","sortOrder","sortable","onSort","sortRows","refreshRows","$checkbox","checked","is","checkAll","checkRow","c","filter","getCheckedRows","toggle","highlightRow","Array","from","getTotalRows","highlightAll","$row","addClass","removeClass","toggleClass","availableWidth","headerWidth","deltaWidth","getColumnCount","getColumnHeaderElement","styles","$style","prependTo","getRow","getCell","findIndex","includes","viewportHeight","apply","arguments","DataManager","currentSort","sortBy","isArray","TypeError","_serialNoColumnAdded","editable","concat","_checkboxColumnAdded","_getNextRowCount","_rows","reverseArray","sort","_aIndex","_bIndex","_a","_b","array","right","temporary","slice","prepareCell","CellManager","instance","prepare","$borderOutline","$borderBg","bindFocusCell","bindEditCell","bindKeyboardNav","bindKeyboardSelection","bindCopyCellContents","bindMouseEvents","$focusedCell","focusCell","currentTarget","$editingCell","activateEditing","submitEditing","deactivateEditing","target","direction","getLeftCell$","getRightCell$","getAboveCell$","getBelowCell$","focusLastCell","getLeftMostCell$","getRightMostCell$","getTopMostCell$","getBottomMostCell$","scrollToCell","inViewport","scrollToRow","getRowCountPerPage","getNextSelectionCursor","$selectionCursor","getSelectionCursor","selectArea","copyCellContents","mouseDown","isStandardCell","clearSelection","highlightRowColumnHeader","_colIndex","colHeaderSelector","rowHeaderSelector","lastSelectors","removeStyle","_selectArea","$cell1","$cell2","cells","getCellsInRange","$cells","r","getCell$","colIndex1","rowIndex1","colIndex2","rowIndex2","cell1","cell2","rowIndices","_rowIndex","$editCell","empty","cell","getEditingObject","currentCellEditing","initValue","parent","$input","focus","getValue","setValue","done","updateCell","values","acc","curr","refreshCell","getFirstColumnIndex","$aboveRow","$belowRow","next","getLastColumnIndex","getLastRowIndex","getViewportHeight","rowHeight","getRowHeight","rowOffset","scrollTopOffset","scrollTop","Math","ceil","offset","KEYCODES","handlers","bind","handler","keyCode","shiftKey","ctrlKey","metaKey","_handlers","preventBubbling","isDefaultPrevented","preventDefault","split","k"],"mappings":"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D,IAAI;AACJ;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA,YAAY,oBAAoB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,oDAAoD,cAAc;;AAElE;AACA;;;;;;;AC3EA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,CAAC;AACD;AACA,CAAC;;AAED;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA,iBAAiB,mBAAmB;AACpC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,iBAAiB,sBAAsB;AACvC;;AAEA;AACA,mBAAmB,2BAA2B;;AAE9C;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAgB,mBAAmB;AACnC;AACA;;AAEA;AACA;;AAEA,iBAAiB,2BAA2B;AAC5C;AACA;;AAEA,QAAQ,uBAAuB;AAC/B;AACA;AACA,GAAG;AACH;;AAEA,iBAAiB,uBAAuB;AACxC;AACA;;AAEA,2BAA2B;AAC3B;AACA;AACA;;AAEA;AACA;AACA;;AAEA,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA;AACA,cAAc;;AAEd,kDAAkD,sBAAsB;AACxE;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA,EAAE;AACF;AACA,EAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,EAAE;AACF;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;AACA,EAAE;AACF;AACA;;AAEA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,EAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uDAAuD;AACvD;;AAEA,6BAA6B,mBAAmB;;AAEhD;;AAEA;;AAEA;AACA;;;;;;;;AC/VA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,WAAW,EAAE;AACrD,wCAAwC,WAAW,EAAE;;AAErD;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA,sCAAsC;AACtC,GAAG;AACH;AACA,8DAA8D;AAC9D;;AAEA;AACA;AACA,EAAE;;AAEF;AACA;AACA;;;;;;;ACxFA,kBAAkB,+IAA+I,qPAAqP,oBAAoB,0WAA0W,eAAe,6DAA6D,+HAA+H,mDAAmD,iEAAiE,iD","file":"frappe-datatable.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"DataTable\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"DataTable\"] = factory();\n\telse\n\t\troot[\"DataTable\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 1);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 970596eedfdc34ae95e3","function camelCaseToDash(str) {\n return str.replace(/([A-Z])/g, (g) => `-${g[0].toLowerCase()}`);\n}\n\nfunction makeDataAttributeString(props) {\n const keys = Object.keys(props);\n\n return keys\n .map((key) => {\n const _key = camelCaseToDash(key);\n const val = props[key];\n\n if (val === undefined) return '';\n return `data-${_key}=\"${val}\" `;\n })\n .join('')\n .trim();\n}\n\nfunction getEditCellHTML() {\n return `\n
\n `;\n}\n\nfunction getColumnHTML(column) {\n const { rowIndex, colIndex, isHeader } = column;\n const dataAttr = makeDataAttributeString({\n rowIndex,\n colIndex,\n isHeader\n });\n\n return `\n \n ${getCellContent(column)}\n \n `;\n}\n\nfunction getCellContent(column) {\n const { isHeader } = column;\n const editCellHTML = isHeader ? '' : getEditCellHTML();\n const sortIndicator = isHeader ? '' : '';\n\n return `\n
\n ${column.format ? column.format(column.content) : column.content}\n ${sortIndicator}\n
\n ${editCellHTML}\n `;\n}\n\nfunction getRowHTML(columns, props) {\n const dataAttr = makeDataAttributeString(props);\n\n return `\n \n ${columns.map(getColumnHTML).join('')}\n \n `;\n}\n\nfunction getHeaderHTML(columns) {\n const $header = `\n \n ${getRowHTML(columns, { isHeader: 1, rowIndex: -1 })}\n \n `;\n\n // columns.map(col => {\n // if (!col.width) return;\n // const $cellContent = $header.find(\n // `.data-table-col[data-col-index=\"${col.colIndex}\"] .content`\n // );\n\n // $cellContent.width(col.width);\n // });\n\n return $header;\n}\n\nfunction getBodyHTML(rows) {\n return `\n \n ${rows.map(row => getRowHTML(row, { rowIndex: row[0].rowIndex })).join('')}\n \n `;\n}\n\nfunction prepareColumn(col, i) {\n if (typeof col === 'string') {\n col = {\n content: col\n };\n }\n return Object.assign(col, {\n colIndex: i\n });\n}\n\nfunction prepareColumns(columns, props = {}) {\n const _columns = columns.map(prepareColumn);\n\n return _columns.map(col => Object.assign({}, col, props));\n}\n\nfunction prepareRowHeader(columns) {\n return prepareColumns(columns, {\n rowIndex: -1,\n isHeader: 1,\n format: (content) => `${content}`\n });\n}\n\nfunction prepareRow(row, i) {\n return prepareColumns(row, {\n rowIndex: i\n });\n}\n\nfunction prepareRows(rows) {\n return rows.map(prepareRow);\n}\n\nfunction getDefault(a, b) {\n return a !== undefined ? a : b;\n}\n\nfunction escapeRegExp(str) {\n // https://stackoverflow.com/a/6969486\n return str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&');\n}\n\nfunction getCSSString(styleMap) {\n let style = '';\n\n for (const prop in styleMap) {\n if (styleMap.hasOwnProperty(prop)) {\n style += `${prop}: ${styleMap[prop]}; `;\n }\n }\n\n return style.trim();\n}\n\nfunction getCSSRuleBlock(rule, styleMap) {\n return `${rule} { ${getCSSString(styleMap)} }`;\n}\n\nfunction namespaceSelector(selector) {\n return '.data-table ' + selector;\n}\n\nfunction buildCSSRule(rule, styleMap, cssRulesString = '') {\n // build css rules efficiently,\n // append new rule if doesnt exist,\n // update existing ones\n\n const rulePatternStr = `${escapeRegExp(rule)} {([^}]*)}`;\n const rulePattern = new RegExp(rulePatternStr, 'g');\n\n if (cssRulesString && cssRulesString.match(rulePattern)) {\n for (const property in styleMap) {\n const value = styleMap[property];\n const propPattern = new RegExp(`${escapeRegExp(property)}:([^;]*);`);\n\n cssRulesString = cssRulesString.replace(rulePattern, function (match, propertyStr) {\n if (propertyStr.match(propPattern)) {\n // property exists, replace value with new value\n propertyStr = propertyStr.replace(propPattern, (match, valueStr) => {\n return `${property}: ${value};`;\n });\n }\n propertyStr = propertyStr.trim();\n\n const replacer =\n `${rule} { ${propertyStr} }`;\n\n return replacer;\n });\n }\n\n return cssRulesString;\n }\n // no match, append new rule block\n return `${cssRulesString}${getCSSRuleBlock(rule, styleMap)}`;\n}\n\nfunction 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\nfunction 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 default {\n getHeaderHTML,\n getBodyHTML,\n getRowHTML,\n getColumnHTML,\n getEditCellHTML,\n prepareRowHeader,\n prepareRows,\n namespaceSelector,\n getCSSString,\n buildCSSRule,\n removeCSSRule,\n makeDataAttributeString,\n getDefault,\n escapeRegExp,\n getCellContent,\n copyTextToClipboard\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils.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","/* globals $, Clusterize */\nimport {\n getHeaderHTML,\n getBodyHTML,\n getRowHTML,\n buildCSSRule,\n removeCSSRule,\n getDefault\n} from './utils';\n\nimport DataManager from './datamanager';\nimport CellManager from './cellmanager';\n\nimport './style.scss';\n\nconst DEFAULT_OPTIONS = {\n events: null,\n data: {\n columns: [],\n rows: []\n },\n editing: null,\n addSerialNoColumn: true,\n addCheckboxColumn: true,\n enableClusterize: true,\n enableLogs: false,\n takeAvailableSpace: false\n};\n\nexport default class DataTable {\n constructor(wrapper, options) {\n\n this.wrapper = $(wrapper);\n if (this.wrapper.length === 0) {\n throw new Error('Invalid argument given for `wrapper`');\n }\n\n this.options = Object.assign({}, DEFAULT_OPTIONS, options);\n // custom user events\n this.events = this.options.events;\n // map of checked rows\n this.checkMap = [];\n\n // make dom, make style, bind events\n this.make();\n\n this.datamanager = new DataManager(this.options);\n this.cellmanager = new CellManager(this);\n\n if (this.options.data) {\n this.refresh(this.options.data);\n }\n }\n\n make() {\n if (this.wrapper.find('.data-table').length === 0) {\n this.makeDom();\n this.makeStyle();\n this.bindEvents();\n }\n }\n\n makeDom() {\n this.wrapper.html(`\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n `);\n\n this.header = this.wrapper.find('.data-table-header');\n this.bodyScrollable = this.wrapper.find('.body-scrollable');\n // this.body = this.wrapper.find('.data-table-body');\n this.footer = this.wrapper.find('.data-table-footer');\n this.$borders = this.wrapper.find('.data-table-borders');\n }\n\n refresh(data) {\n this.datamanager.init(data);\n this.render();\n }\n\n appendRows(rows) {\n this.datamanager.appendRows(rows);\n this.render();\n }\n\n render() {\n this.renderHeader();\n this.renderBody();\n this.setDimensions();\n }\n\n renderHeader() {\n const columns = this.datamanager.getColumns();\n\n this.header.html(getHeaderHTML(columns));\n }\n\n renderBody() {\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.html(`\n \n ${getBodyHTML(rows)}\n
\n `);\n }\n\n renderBodyWithClusterize() {\n const self = this;\n\n // empty body\n this.bodyScrollable.html(`\n \n ${getBodyHTML([])}\n
\n `);\n\n this.start = 0;\n this.pageLength = 1000;\n this.end = this.start + this.pageLength;\n\n // only append ${this.pageLength} rows in the beginning,\n // defer remaining\n const rows = this.datamanager.getRows(this.start, this.end);\n const initialData = this.getDataForClusterize(rows);\n\n this.clusterize = new Clusterize({\n rows: initialData,\n scrollElem: this.bodyScrollable.get(0),\n contentElem: this.bodyScrollable.find('tbody').get(0),\n callbacks: {\n clusterChanged() {\n self.highlightCheckedRows();\n }\n }\n });\n this.log('dataAppended', this.pageLength);\n this.appendRemainingData();\n }\n\n appendRemainingData() {\n let dataAppended = this.pageLength;\n const promises = [];\n const rowCount = this.datamanager.getRowCount();\n\n while (dataAppended + this.pageLength < rowCount) {\n this.start = this.end;\n this.end = this.start + this.pageLength;\n promises.push(this.appendNextPagePromise(this.start, this.end));\n dataAppended += this.pageLength;\n }\n\n if (rowCount % this.pageLength > 0) {\n // last page\n this.start = this.end;\n this.end = this.start + this.pageLength;\n promises.push(this.appendNextPagePromise(this.start, this.end));\n }\n\n return promises.reduce(\n (prev, cur) => prev.then(cur), Promise.resolve()\n );\n }\n\n appendNextPagePromise(start, end) {\n return new Promise(resolve => {\n setTimeout(() => {\n const rows = this.datamanager.getRows(start, end);\n const data = this.getDataForClusterize(rows);\n\n this.clusterize.append(data);\n this.log('dataAppended', rows.length);\n resolve();\n }, 0);\n });\n }\n\n getDataForClusterize(rows) {\n return rows.map((row) => getRowHTML(row, { rowIndex: row[0].rowIndex }));\n }\n\n refreshRows() {\n this.renderBody();\n this.setDimensions();\n }\n\n bindEvents() {\n this.bindResizeColumn();\n this.bindSortColumn();\n this.bindCheckbox();\n }\n\n setDimensions() {\n const self = this;\n\n if (!this.options.takeAvailableSpace) {\n // setting width as 0 will ensure that the\n // header doesn't take the available space\n this.header.css({\n width: 0\n });\n }\n\n this.header.css({\n margin: 0\n });\n\n // cache minWidth for each column\n this.minWidthMap = getDefault(this.minWidthMap, []);\n this.header.find('.data-table-col').each(function () {\n const col = $(this);\n const width = parseInt(col.find('.content').css('width'), 10);\n const colIndex = col.attr('data-col-index');\n\n if (!self.minWidthMap[colIndex]) {\n // only set this once\n self.minWidthMap[colIndex] = width;\n }\n });\n\n // set initial width as naturally calculated by table's first row\n this.bodyScrollable.find('.data-table-row[data-row-index=\"0\"] .data-table-col').each(function () {\n const $cell = $(this);\n let width = parseInt($cell.find('.content').css('width'), 10);\n const height = parseInt($cell.find('.content').css('height'), 10);\n const { colIndex } = self.getCellAttr($cell);\n const minWidth = self.getColumnMinWidth(colIndex);\n\n if (width < minWidth) {\n width = minWidth;\n }\n self.setColumnWidth(colIndex, width);\n self.setDefaultCellHeight(height);\n });\n\n this.setBodyWidth();\n\n this.setStyle('.data-table .body-scrollable', {\n 'margin-top': this.header.height() + 'px'\n });\n\n // center align Sr. No column\n if (this.options.addSerialNoColumn) {\n const index = this.getSerialColumnIndex();\n\n this.setStyle(`.data-table [data-col-index=\"${index}\"]`, {\n 'text-align': 'center'\n });\n }\n\n this.bodyScrollable.find('.table').css('margin', 0);\n }\n\n bindResizeColumn() {\n const self = this;\n let isDragging = false;\n let $currCell, startWidth, startX;\n\n this.header.on('mousedown', '.data-table-col', function (e) {\n $currCell = $(this);\n const colIndex = $currCell.attr('data-col-index');\n const col = self.getColumn(colIndex);\n\n if (col && col.resizable === false) {\n return;\n }\n\n isDragging = true;\n startWidth = $currCell.find('.content').width();\n startX = e.pageX;\n });\n\n $('body').on('mouseup', function (e) {\n if (!$currCell) return;\n isDragging = false;\n const colIndex = $currCell.attr('data-col-index');\n\n if ($currCell) {\n const width = parseInt($currCell.find('.content').css('width'), 10);\n\n self.setColumnWidth(colIndex, width);\n self.setBodyWidth();\n $currCell = null;\n }\n });\n\n $('body').on('mousemove', function (e) {\n if (!isDragging) return;\n const finalWidth = startWidth + (e.pageX - startX);\n const colIndex = $currCell.attr('data-col-index');\n\n if (self.getColumnMinWidth(colIndex) > finalWidth) {\n // don't resize past minWidth\n return;\n }\n\n self.setColumnHeaderWidth(colIndex, finalWidth);\n });\n }\n\n bindSortColumn() {\n const self = this;\n\n this.header.on('click', '.data-table-col .content span', function () {\n const $cell = $(this).closest('.data-table-col');\n let sortOrder = getDefault($cell.attr('data-sort-order'), 'none');\n const colIndex = $cell.attr('data-col-index');\n const col = self.getColumn(colIndex);\n\n if (col && col.sortable === false) {\n return;\n }\n\n // reset sort indicator\n self.header.find('.sort-indicator').text('');\n self.header.find('.data-table-col').attr('data-sort-order', 'none');\n\n if (sortOrder === 'none') {\n $cell.attr('data-sort-order', 'asc');\n $cell.find('.sort-indicator').text('▲');\n } else if (sortOrder === 'asc') {\n $cell.attr('data-sort-order', 'desc');\n $cell.find('.sort-indicator').text('▼');\n } else if (sortOrder === 'desc') {\n $cell.attr('data-sort-order', 'none');\n $cell.find('.sort-indicator').text('');\n }\n\n // sortWith this action\n sortOrder = $cell.attr('data-sort-order');\n\n if (self.events && self.events.onSort) {\n self.events.onSort(colIndex, sortOrder);\n } else {\n self.sortRows(colIndex, sortOrder);\n self.refreshRows();\n }\n });\n }\n\n sortRows(colIndex, sortOrder) {\n this.datamanager.sortRows(colIndex, sortOrder);\n }\n\n bindCheckbox() {\n if (!this.options.addCheckboxColumn) return;\n const self = this;\n\n this.wrapper.on('click', '.data-table-col[data-col-index=\"0\"] [type=\"checkbox\"]', function () {\n const $checkbox = $(this);\n const $cell = $checkbox.closest('.data-table-col');\n const { rowIndex, isHeader } = self.getCellAttr($cell);\n const checked = $checkbox.is(':checked');\n\n if (isHeader) {\n self.checkAll(checked);\n } else {\n self.checkRow(rowIndex, checked);\n }\n });\n }\n\n getCheckedRows() {\n\n return this.checkMap\n .map((c, rowIndex) => {\n if (c) {\n return rowIndex;\n }\n return null;\n })\n .filter(c => {\n return c !== null || c !== undefined;\n });\n }\n\n highlightCheckedRows() {\n this.getCheckedRows()\n .map(rowIndex => this.checkRow(rowIndex, true));\n }\n\n checkRow(rowIndex, toggle) {\n const value = toggle ? 1 : 0;\n\n // update internal map\n this.checkMap[rowIndex] = value;\n // set checkbox value explicitly\n this.bodyScrollable\n .find(`.data-table-col[data-row-index=\"${rowIndex}\"][data-col-index=\"0\"] [type=\"checkbox\"]`)\n .prop('checked', toggle);\n // highlight row\n this.highlightRow(rowIndex, toggle);\n }\n\n checkAll(toggle) {\n const value = toggle ? 1 : 0;\n\n // update internal map\n if (toggle) {\n this.checkMap = Array.from(Array(this.getTotalRows())).map(c => value);\n } else {\n this.checkMap = [];\n }\n // set checkbox value\n this.bodyScrollable\n .find('.data-table-col[data-col-index=\"0\"] [type=\"checkbox\"]')\n .prop('checked', toggle);\n // highlight all\n this.highlightAll(toggle);\n }\n\n highlightRow(rowIndex, toggle = true) {\n const $row = this.bodyScrollable\n .find(`.data-table-row[data-row-index=\"${rowIndex}\"]`);\n\n if (toggle) {\n $row.addClass('row-highlight');\n } else {\n $row.removeClass('row-highlight');\n }\n }\n\n highlightAll(toggle = true) {\n this.bodyScrollable\n .find('.data-table-row')\n .toggleClass('row-highlight', toggle);\n }\n\n setColumnWidth(colIndex, width) {\n // set width for content\n this.setStyle(`[data-col-index=\"${colIndex}\"] .content`, {\n width: width + 'px'\n });\n // set width for edit cell\n this.setStyle(`[data-col-index=\"${colIndex}\"] .edit-cell`, {\n width: width + 'px'\n });\n }\n\n setColumnHeaderWidth(colIndex, width) {\n this.setStyle(`[data-col-index=\"${colIndex}\"][data-is-header] .content`, {\n width: width + 'px'\n });\n }\n\n setDefaultCellHeight(height) {\n this.setStyle('.data-table-col .content', {\n height: height + 'px'\n });\n }\n\n setRowHeight(rowIndex, height) {\n this.setStyle(`[data-row-index=\"${rowIndex}\"] .content`, {\n height: height + 'px'\n });\n }\n\n setColumnWidths() {\n const availableWidth = this.wrapper.width();\n const headerWidth = this.header.width();\n\n if (headerWidth > availableWidth) {\n // don't resize, horizontal scroll takes place\n return;\n }\n\n const columns = this.datamanager.getColumns();\n const deltaWidth = (availableWidth - headerWidth) / this.datamanager.getColumnCount();\n\n columns.map(col => {\n const width = this.getColumnHeaderElement(col.colIndex).width();\n let finalWidth = width + deltaWidth - 16;\n\n if (this.options.addSerialNoColumn && col.colIndex === 0) {\n return;\n }\n\n this.setColumnHeaderWidth(col.colIndex, finalWidth);\n this.setColumnWidth(col.colIndex, finalWidth);\n });\n this.setBodyWidth();\n }\n\n setBodyWidth() {\n this.bodyScrollable.css(\n 'width',\n parseInt(this.header.css('width'), 10)\n );\n }\n\n setStyle(rule, styleMap) {\n let styles = this.$style.text();\n\n styles = buildCSSRule(rule, styleMap, styles);\n this.$style.html(styles);\n }\n\n removeStyle(rule) {\n let styles = this.$style.text();\n\n styles = removeCSSRule(rule, styles);\n this.$style.html(styles);\n }\n\n makeStyle() {\n this.$style = $('')\n .prependTo(this.wrapper);\n }\n\n getColumn(colIndex) {\n return this.datamanager.getColumn(colIndex);\n }\n\n getRow(rowIndex) {\n return this.datamanager.getRow(rowIndex);\n }\n\n getCell(colIndex, rowIndex) {\n return this.datamanager.getCell(colIndex, rowIndex);\n }\n\n getColumnHeaderElement(colIndex) {\n colIndex = +colIndex;\n if (colIndex < 0) return null;\n return this.wrapper.find(\n `.data-table-col[data-is-header][data-col-index=\"${colIndex}\"]`\n );\n }\n\n getColumnMinWidth(colIndex) {\n colIndex = +colIndex;\n return this.minWidthMap && this.minWidthMap[colIndex];\n }\n\n getCellAttr($cell) {\n return $cell.data();\n }\n\n getTotalRows() {\n return this.datamanager.getRowCount();\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 getLastColumnIndex() {\n return this.datamanager.getColumnCount() - 1;\n }\n\n getLastRowIndex() {\n return this.datamanager.getRowCount() - 1;\n }\n\n getSerialColumnIndex() {\n const columns = this.datamanager.getColumns();\n\n return columns.findIndex(column => column.content.includes('Sr. No'));\n }\n\n getViewportHeight() {\n if (!this.viewportHeight) {\n this.viewportHeight = this.bodyScrollable.height();\n }\n\n return this.viewportHeight;\n }\n\n log() {\n if (this.options.enableLogs) {\n console.log.apply(console, arguments);\n }\n }\n}\n\n\n\n\n// WEBPACK FOOTER //\n// ./src/datatable.js","\nexport default class DataManager {\n constructor(options) {\n this.options = options;\n this.rowCount = 0;\n this.currentSort = {\n sortBy: -1, // colIndex\n sortOrder: 'none' // asc, desc, none\n };\n }\n\n init(data) {\n let { columns, rows } = data;\n\n this.columns = this.prepareColumns(columns);\n this.rows = this.prepareRows(rows);\n }\n\n prepareColumns(columns) {\n if (!Array.isArray(columns)) {\n throw new TypeError('`columns` must be an array');\n }\n\n if (this.options.addSerialNoColumn && !this._serialNoColumnAdded) {\n const val = {\n content: 'Sr. No',\n editable: false,\n resizable: false\n };\n\n columns = [val].concat(columns);\n this._serialNoColumnAdded = true;\n }\n\n if (this.options.addCheckboxColumn && !this._checkboxColumnAdded) {\n const val = {\n content: '',\n editable: false,\n resizable: false\n };\n\n columns = [val].concat(columns);\n this._checkboxColumnAdded = true;\n }\n\n // wrap the title in span\n columns = columns.map(column => {\n if (typeof column === 'string') {\n column = `${column}`;\n } else if (typeof column === 'object') {\n column.content = `${column.content}`;\n }\n\n return column;\n });\n\n return prepareColumns(columns, {\n isHeader: 1\n });\n }\n\n prepareRows(rows) {\n if (!Array.isArray(rows) || !Array.isArray(rows[0])) {\n throw new TypeError('`rows` must be an array of arrays');\n }\n\n rows = rows.map((row, i) => {\n const index = this._getNextRowCount();\n\n if (row.length < this.columns.length) {\n if (this._serialNoColumnAdded) {\n const val = (index + 1) + '';\n\n row = [val].concat(row);\n }\n\n if (this._checkboxColumnAdded) {\n const val = '';\n\n row = [val].concat(row);\n }\n }\n\n return prepareRow(row, index);\n });\n\n return rows;\n }\n\n appendRows(rows) {\n if (Array.isArray(rows) && !Array.isArray(rows[0])) {\n rows = [rows];\n }\n const _rows = this.prepareRows(rows);\n\n this.rows = this.rows.concat(_rows);\n }\n\n sortRows(colIndex, sortOrder = 'none') {\n colIndex = +colIndex;\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 this.currentSort.colIndex = colIndex;\n this.currentSort.sortOrder = sortOrder;\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 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() {\n return this.columns;\n }\n\n getColumnCount() {\n return this.columns.length;\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\nfunction prepareColumns(columns, props = {}) {\n const _columns = columns.map(prepareCell);\n\n return _columns.map(col => Object.assign({}, col, props));\n}\n\nfunction prepareRow(row, i) {\n return prepareColumns(row, {\n rowIndex: i\n });\n}\n\nfunction prepareCell(col, i) {\n if (typeof col === 'string') {\n col = {\n content: col\n };\n }\n return Object.assign(col, {\n colIndex: i\n });\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/datamanager.js","import { getCellContent, copyTextToClipboard } from './utils';\nimport keyboard from 'keyboard';\n\nexport default class CellManager {\n constructor(instance) {\n this.instance = instance;\n this.options = this.instance.options;\n this.bodyScrollable = this.instance.bodyScrollable;\n\n this.prepare();\n this.bindEvents();\n }\n\n prepare() {\n this.$borderOutline = this.instance.$borders.find('.border-outline');\n this.$borderBg = this.instance.$borders.find('.border-background');\n }\n\n bindEvents() {\n this.bindFocusCell();\n this.bindEditCell();\n this.bindKeyboardNav();\n this.bindKeyboardSelection();\n this.bindCopyCellContents();\n this.bindMouseEvents();\n }\n\n bindFocusCell() {\n const bodyScrollable = this.instance.bodyScrollable;\n\n this.$focusedCell = null;\n bodyScrollable.on('click', '.data-table-col', (e) => {\n this.focusCell($(e.currentTarget));\n });\n }\n\n bindEditCell() {\n const self = this;\n\n this.$editingCell = null;\n this.bodyScrollable.on('dblclick', '.data-table-col', function () {\n self.activateEditing($(this));\n });\n\n 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(this.$editingCell);\n this.deactivateEditing();\n }\n });\n\n $(document.body).on('click', e => {\n if ($(e.target).is('.edit-cell, .edit-cell *')) return;\n this.deactivateEditing();\n });\n }\n\n bindKeyboardNav() {\n const focusCell = (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') {\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 } = this.getCellAttr($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 const scrollToCell = (direction) => {\n if (!this.$focusedCell) return false;\n\n if (!this.inViewport(this.$focusedCell)) {\n const { rowIndex } = this.getCellAttr(this.$focusedCell);\n\n this.scrollToRow(rowIndex - this.getRowCountPerPage() + 2);\n return true;\n }\n\n return false;\n };\n\n ['left', 'right', 'up', 'down'].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 ['left', 'right', 'up', 'down'].map(\n direction => keyboard.on(direction, () => scrollToCell(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 this.bodyScrollable.on('mousedown', '.data-table-col', (e) => {\n mouseDown = true;\n this.focusCell($(e.currentTarget));\n });\n\n this.bodyScrollable.on('mouseup', () => {\n mouseDown = false;\n });\n\n this.bodyScrollable.on('mousemove', '.data-table-col', (e) => {\n if (!mouseDown) return;\n this.selectArea($(e.currentTarget));\n });\n }\n\n focusCell($cell) {\n if (!$cell.length) return;\n\n const { colIndex } = this.getCellAttr($cell);\n\n if (this.isStandardCell(colIndex)) {\n return;\n }\n\n this.deactivateEditing();\n this.clearSelection();\n\n if (this.options.addCheckboxColumn && colIndex === 0) {\n return;\n }\n\n if (this.$focusedCell) {\n this.$focusedCell.removeClass('selected');\n }\n\n this.$focusedCell = $cell;\n $cell.addClass('selected');\n\n this.highlightRowColumnHeader($cell);\n }\n\n highlightRowColumnHeader($cell) {\n const { colIndex, rowIndex } = this.getCellAttr($cell);\n const _colIndex = this.instance.getSerialColumnIndex();\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.lastSelectors) {\n this.instance.removeStyle(this.lastSelectors.colHeaderSelector);\n this.instance.removeStyle(this.lastSelectors.rowHeaderSelector);\n }\n\n this.instance.setStyle(colHeaderSelector, {\n 'background-color': 'var(--light-bg)'\n });\n\n this.instance.setStyle(rowHeaderSelector, {\n 'background-color': 'var(--light-bg)'\n });\n\n this.lastSelectors = {\n colHeaderSelector,\n rowHeaderSelector\n };\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 const cells = this.getCellsInRange(...arguments);\n\n if (!cells) return false;\n this.clearSelection();\n const $cells = cells.map(([c, r]) => this.getCell$(r, c)[0]);\n\n $($cells).addClass('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.length && $cell2.length)) {\n return false;\n }\n\n const cell1 = this.getCellAttr($cell1);\n const cell2 = this.getCellAttr($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 this.bodyScrollable.find('.data-table-col.highlight').removeClass('highlight');\n this.$selectionCursor = null;\n }\n\n getSelectionCursor() {\n return this.$selectionCursor || this.$focusedCell;\n }\n\n activateEditing($cell) {\n const { rowIndex, colIndex } = this.getCellAttr($cell);\n const col = this.instance.getColumn(colIndex);\n\n if (col && col.editable === false) {\n return;\n }\n\n if (this.$editingCell) {\n const { _rowIndex, _colIndex } = this.getCellAttr(this.$editingCell);\n\n if (rowIndex === _rowIndex && colIndex === _colIndex) {\n // editing the same cell\n return;\n }\n }\n\n this.$editingCell = $cell;\n $cell.addClass('editing');\n\n const $editCell = $cell.find('.edit-cell').empty();\n const cell = this.getCell(colIndex, rowIndex);\n const editing = this.getEditingObject(colIndex, rowIndex, cell.content, $editCell);\n\n if (editing) {\n this.currentCellEditing = editing;\n // initialize editing input with cell value\n editing.initValue(cell.content);\n }\n }\n\n deactivateEditing() {\n if (!this.$editingCell) return;\n this.$editingCell.removeClass('editing');\n this.$editingCell = null;\n }\n\n getEditingObject(colIndex, rowIndex, value, parent) {\n if (this.options.editing) {\n return this.options.editing(colIndex, rowIndex, value, parent);\n }\n\n // editing fallback\n const $input = $('');\n\n parent.append($input);\n\n return {\n initValue(value) {\n $input.focus();\n return $input.val(value);\n },\n getValue() {\n return $input.val();\n },\n setValue(value) {\n return $input.val(value);\n }\n };\n }\n\n submitEditing($cell) {\n const { rowIndex, colIndex } = this.getCellAttr($cell);\n\n if ($cell) {\n const editing = this.currentCellEditing;\n\n if (editing) {\n const value = editing.getValue();\n const done = editing.setValue(value);\n\n if (done && done.then) {\n // wait for promise then update internal state\n done.then(\n () => this.updateCell(rowIndex, colIndex, value)\n );\n } else {\n this.updateCell(rowIndex, colIndex, value);\n }\n }\n }\n\n this.currentCellEditing = null;\n }\n\n copyCellContents($cell1, $cell2) {\n const cells = this.getCellsInRange(...arguments);\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(rowIndex, colIndex, value) {\n const cell = this.getCell(colIndex, rowIndex);\n\n cell.content = value;\n this.refreshCell(cell);\n }\n\n refreshCell(cell) {\n const selector = `.data-table-col[data-row-index=\"${cell.rowIndex}\"][data-col-index=\"${cell.colIndex}\"]`;\n const $cell = this.bodyScrollable.find(selector);\n\n $cell.html(getCellContent(cell));\n }\n\n isStandardCell(colIndex) {\n // Standard cells are in Sr. No and Checkbox column\n return colIndex < this.instance.getFirstColumnIndex();\n }\n\n getCell$(rowIndex, colIndex) {\n return this.bodyScrollable.find(`.data-table-col[data-row-index=\"${rowIndex}\"][data-col-index=\"${colIndex}\"]`);\n }\n\n getAboveCell$($cell) {\n const { colIndex } = this.getCellAttr($cell);\n const $aboveRow = $cell.parent().prev();\n\n return $aboveRow.find(`[data-col-index=\"${colIndex}\"]`);\n }\n\n getBelowCell$($cell) {\n const { colIndex } = this.getCellAttr($cell);\n const $belowRow = $cell.parent().next();\n\n return $belowRow.find(`[data-col-index=\"${colIndex}\"]`);\n }\n\n getLeftCell$($cell) {\n return $cell.prev();\n }\n\n getRightCell$($cell) {\n return $cell.next();\n }\n\n getLeftMostCell$(rowIndex) {\n return this.getCell$(rowIndex, this.instance.getFirstColumnIndex());\n }\n\n getRightMostCell$(rowIndex) {\n return this.getCell$(rowIndex, this.instance.getLastColumnIndex());\n }\n\n getTopMostCell$(colIndex) {\n return this.getCell$(0, colIndex);\n }\n\n getBottomMostCell$(colIndex) {\n return this.getCell$(this.instance.getLastRowIndex(), colIndex);\n }\n\n getCell(colIndex, rowIndex) {\n return this.instance.datamanager.getCell(colIndex, rowIndex);\n }\n\n getCellAttr($cell) {\n return $cell.data();\n }\n\n getRowHeight() {\n return this.bodyScrollable.find('.data-table-row:first').height();\n }\n\n inViewport($cell) {\n let colIndex, rowIndex;\n\n if (typeof $cell === 'number') {\n [colIndex, rowIndex] = arguments;\n } else {\n let cell = this.getCellAttr($cell);\n\n colIndex = cell.colIndex;\n rowIndex = cell.rowIndex;\n }\n\n const viewportHeight = this.instance.getViewportHeight();\n const rowHeight = this.getRowHeight();\n const rowOffset = rowIndex * rowHeight;\n\n const scrollTopOffset = this.bodyScrollable[0].scrollTop;\n\n if (rowOffset - scrollTopOffset + rowHeight < viewportHeight) {\n return true;\n }\n\n return false;\n }\n\n scrollToCell($cell) {\n const { rowIndex } = this.getCellAttr($cell);\n\n this.scrollToRow(rowIndex);\n }\n\n getRowCountPerPage() {\n return Math.ceil(this.instance.getViewportHeight() / this.getRowHeight());\n }\n\n scrollToRow(rowIndex) {\n const offset = rowIndex * this.getRowHeight();\n\n this.bodyScrollable[0].scrollTop = offset;\n }\n}\n\n\n\n\n// WEBPACK FOOTER //\n// ./src/cellmanager.js","const 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\nconst handlers = {};\n\nfunction bind() {\n $(document).on('keydown', handler);\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 if (!e.isDefaultPrevented()) {\n e.preventDefault();\n }\n }\n });\n\n }\n}\n\nbind();\n\nexport default {\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","// style-loader: Adds some css to the DOM by adding a ') - .prependTo(this.wrapper); + this.style = new Style(this.wrapper); } getColumn(colIndex) { diff --git a/src/performance.js b/src/performance.js new file mode 100644 index 0000000..9dcd0de --- /dev/null +++ b/src/performance.js @@ -0,0 +1,14 @@ +class Performance { + start() { + this._start = window.performance.now(); + } + + end() { + this._end = window.performance.now(); + console.log(this._end - this._start); + } +} + +let perf = new Performance(); + +export default perf; diff --git a/src/style.js b/src/style.js new file mode 100644 index 0000000..0c227a8 --- /dev/null +++ b/src/style.js @@ -0,0 +1,53 @@ +import { camelCaseToDash } from './utils'; + +export default class Style { + + constructor(wrapper) { + const styleEl = document.createElement('style'); + + document.head.appendChild(styleEl); + this.styleSheet = styleEl.sheet; + } + + setStyle(rule, styleMap) { + const styles = Object.keys(styleMap) + .map(prop => { + if (!prop.includes('-')) { + prop = camelCaseToDash(prop); + } + return `${prop}:${styleMap[prop]};`; + }) + .join(''); + let ruleString = `${rule} { ${styles} }`; + + this.styleSheet.insertRule(ruleString, this.styleSheet.cssRules.length); + } + + set(elements, styleMap) { + if (!Array.isArray(elements)) { + elements = [elements]; + } + + elements.map(element => { + for (const prop in styleMap) { + element.style[prop] = styleMap[prop]; + } + }); + } + + unset(elements, styleProps) { + if (!Array.isArray(elements)) { + elements = [elements]; + } + + if (!Array.isArray(styleProps)) { + styleProps = [styleProps]; + } + + elements.map(element => { + for (const prop of styleProps) { + element.style[prop] = ''; + } + }); + } +} diff --git a/src/utils.js b/src/utils.js index decaa5b..f8b2724 100644 --- a/src/utils.js +++ b/src/utils.js @@ -271,5 +271,6 @@ export default { getDefault, escapeRegExp, getCellContent, - copyTextToClipboard + copyTextToClipboard, + camelCaseToDash };